Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Will Fernando

[Resolvido] capturar variavel de fora da classe

Recommended Posts

Opa pessoal ..

seguinte tenho um script aqui que funciona da seguinte maneira .. fora da classe eu tenho um objeto com a istancia do PDO que uso para conexao, mas preciso usa-lo dentro da classe para fazer a consulta.. eis a guestao como ?

 

variavel com a conexao fora da classe

 

$Database = Database::getInstance($Config);

um metodo exemplo de aonde quero capturar a conexao

public function getListen(){
		try{
		   $Listen = $Database->query("
		   SELECT Scp_Setores.CODIGOSETOR, Scp_Setores.NOMESETOR, Scp_Secretarias.NOMESECRETARIA FROM Scp_Setores INNER JOIN Scp_Secretarias ON (Scp_Setores.CODIGOSECRETARIA = Scp_Secretarias.CODIGOSECRETARIA) 
		   ");
		   $Listen->FetchAll();
		}
		catch(PDOException $EListen){
			echo $EListen->getMessage().PHP_EOL;
			echo 'in '.$EListen->getFile();
		}
		return $Listen;
	}

valww

Compartilhar este post


Link para o post
Compartilhar em outros sites

existem os jeitos nao recomendados de fazer esse tipo de coisa, que é usando variaveis globais

 

geralmente é usado algum padrao de desenvolvimento pra manter um bom acesso a base de dados

 

o que tu pode fazer, por exemplo - mas só um exemplo - é colocar a instancia da sua base numa propriedade:

 

$this->DB = Database::getInstance($Config);
$this->DB->Query();

mas nao importa como você venha a fazer isso, sempre tenha em mente: faça de um modo com que os outros metodos nao precisem fazer a mesma coisa, evitando a repetiçao

Compartilhar este post


Link para o post
Compartilhar em outros sites

testei .. dando um print_r pra ve se me devolvia a array com os dados e a resposta foi ...

 

PDOStatement Object ( [queryString] => SELECT Scp_Setores.CODIGOSETOR, Scp_Setores.NOMESETOR, Scp_Secretarias.NOMESECRETARIA FROM Scp_Setores INNER JOIN Scp_Secretarias ON (Scp_Setores.CODIGOSECRETARIA = Scp_Secretarias.CODIGOSECRETARIA) )

print_r($Obj->getListen());

os scripts usados..

class CSetores implements ICrud{
	private $Listen;
	private $Database;
    public function __construct(){
		$this->Database = Registry::get('Database');
public function getListen(){
		try{
		   $Listen = $this->Database->query("
		   SELECT Scp_Setores.CODIGOSETOR, Scp_Setores.NOMESETOR, Scp_Secretarias.NOMESECRETARIA FROM Scp_Setores INNER JOIN Scp_Secretarias ON (Scp_Setores.CODIGOSECRETARIA = Scp_Secretarias.CODIGOSECRETARIA) 
		   ");
		   $Listen->FetchAll();
		}
		catch(PDOException $EListen){
			echo $EListen->getMessage().PHP_EOL;
			echo 'in '.$EListen->getFile();
		}
		return $Listen;
	}

*retirei as partes denessesarias do script

 

obs: eu não intendi direito pq ele devolveu a string da query O.o estava esperando o array com os dados

 

valww

Compartilhar este post


Link para o post
Compartilhar em outros sites

não intendi pq aquilo tava aconsendo mas problema resolvido.

dei um " ->fetch(PDO::FETCH_OBJ) " ae funciono..

 

valww ae galera

 

*Topico Resolvido

Compartilhar este post


Link para o post
Compartilhar em outros sites

PDOStatement Object (...)

obs: eu não intendi direito pq ele devolveu a string da query O.o estava esperando o array com os dados

 

valww

 

http://br2.php.net/manual/en/class.pdostatement.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Will,

 

Se seu método usa uma instância de um objeto qualquer, não assuma que esse objeto estará sempre disponível em um escopo global, isso é um erro que poderá trazer consequencias graves, em vez disso, dê ao seu método a instância que ele precisará:

 

//...
public function getListen( PDO $pdo ){
	try {
	 	$stm = $pdo->query( ... );
	 	$iterator = new ArrayIterator( $stm->fetchAll( PDO::FETCH_OBJ ) );
	} catch ( PDOException $e ){
	 	trow new RuntimeException( sprintf( 'Erro ao executar a consulta: %s' $e->getMessage() ) , $e->getCode() , $e );
	}

	return $iterator;
}
//...

 

Ai, para usar:

 

$database = Database::getInstance( $config );

try {
	$iterator = $objeto->getListen( $database );

	foreach ( $iterator as $row ){
	 	var_dump( $row );
	}
} catch ( RuntimeException $e ){
	echo $e->getMessage();
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.