Ir para conteúdo

POWERED BY:

Arquivado

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

dead_thinker

Usar variaveis "da pagina" na classe. ERRO!

Recommended Posts

PessoALL, meu conhecimento em PHP é iniciante/intermediário, e estou com problemas em descobri qual é o problema.

 

No codigo abaixo, tento recuperar as configurações do banco de um arquivo ini, e setar na classe de acesso ao banco que o sistema usa, mas não consigo usar os dados do .ini nem dentro da classe, nem fora utilizando o $GLOBALS. Alguem tem alguma dica do que pode ser?

O erro é esse:

Parse error: parse error, unexpected T_VARIABLE in ..._dbconfig.php on line 54

<?phprequire('_utils.php');$file 		 = "_dbconfig.ini";$fileContent = split("\n", file_get_contents($file));$db_host	 = catchValue($fileContent[0]);$db_user 	 = catchValue($fileContent[1]);$db_password = catchValue($fileContent[2]);$db_database = catchValue($fileContent[3]);	class DBConfig{	static $debug	= TRUE;			static $dsn = array(		'phptype'  => 'mysql',		'dbsyntax' => false,		'username' => 'root',		'password' => false,		'protocol' => false,		'hostspec' => $GLOBALS["db_database"],		'port'	 => false,		'socket'   => false,		'database' => 'db',		'new_ink'  => false,	);		static $options = array(	);}?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tire a vírgula... Acho q o problema está ali, com a setinha do lado:Se não for, por favor indique a linha 54 do _noix_dbconfig.php.

PessoALL, meu conhecimento em PHP é iniciante/intermediário, e estou com problemas em descobri qual é o problema.No codigo abaixo, tento recuperar as configurações do banco de um arquivo ini, e setar na classe de acesso ao banco que o sistema usa, mas não consigo usar os dados do .ini nem dentro da classe, nem fora utilizando o $GLOBALS. Alguem tem alguma dica do que pode ser?O erro é esse:

Parse error: parse error, unexpected T_VARIABLE in C:\xampp-win32-1.5.3a\xampp\htdocs\event_secretaria\_noix_dbconfig.php on line 54
<?phprequire('_utils.php');$file 		 = "_dbconfig.ini";$fileContent = split("\n", file_get_contents($file));$db_host	 = catchValue($fileContent[0]);$db_user 	 = catchValue($fileContent[1]);$db_password = catchValue($fileContent[2]);$db_database = catchValue($fileContent[3]);	class DBConfig{	static $debug	= TRUE;			static $dsn = array(		'phptype'  => 'mysql',		'dbsyntax' => false,		'username' => 'root',		'password' => false,		'protocol' => false,		'hostspec' => $GLOBALS["db_database"],		'port'	 => false,		'socket'   => false,		'database' => 'db',		'new_ink'  => false, <==============	);		static $options = array(	);}?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, valew, mas ainda não é isso. Deve ter alguma coisa a ver com visibilidade/escopo da variável, mas não estou encontrando nada na net ainda.Alguem tem uma luz? :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

então fera, isso ta mais pra erro de sintaxe, do que pra erro de programação OO.da um debbugada no seu código ae.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é, antes mesmo de salvar o arquivo, eu vejo o erro, pelo menos o Eclipse acusa, mas não dá nem um detalhe sobre o mesmo, ao meu ver, está correto, o erro deve estarno contexto da variável sendo usada, não sei se se usa assim mesmo, ou se precisa fazer algo mais, ainda não encontrei nada na net e na documentação.:(Se alguem puder ajudar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpem, acho que colei o erro errado hehe, o erro ocorre nesta linha:

 

'hostspec' => $GLOBALS["db_database"],

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que eu saiba você não tem como atribuir um valor assim para um parametro da classe.

 

você tem que fazer isso através do construtor. Vou ver se acho na documentação e ja posto aqui a explicação correta.

 

achei:

 

No PHP 4, somente inicializações com constantes são permitidas para variáveis com var. Para inicializar variáveis com valores não constantes, você precisará de uma função de inicialização chamada automaticamente quando o objeto for construído a partir da classe. Por isso, essa função é conhecida como construtor (veja baixo).

<?phpclass CarrinhoDeCompras {   /* Nenhuma delas funcionarão com o PHP 4 */   var $data_de_hoje = date("Y-m-d");   var $nome = $primeiro_nome;   var $proprietario = 'Fred ' . 'Jones';   /* Mas array contendo valores constantes irao */   var $items = array("VCR", "TV");}/* Esta é a forma como deve ser feito */class CarrinhoDeCompras {   var $data_de_hoje;   var $nome;   var $proprietario;   var $items = array("VCR", "TV");   function CarrinhoDeCompras() {	   $this->data_de_hoje = date("Y-m-d");	   $this->nome = $GLOBALS['primeiro_nome'];	   /* etc. . . */   }}?>

Espero ter te ajudado rapaz.... abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, valeu, tentei o que me falou mas não deu certo, a propósito, estou usando PHP 5. Fiz assim:

 

<?phprequire('_utils.php');class DBConfig{	static $debug	= TRUE;	// Arquivo de configuração do database		var $file;	// Recupera o conteúdo do arquivo	var $fileContent;		// Recupera os valores	var $db_host;	var $db_user;	var $db_password;	var $db_database;		static $dsn = array(		'phptype'  => 'mysql',		'dbsyntax' => false,		'username' => 'root',		'password' => false,		'protocol' => false,		'hostspec' => $this->db_host,		'port'	 => false,		'socket'   => false,		'database' => 'event_secretaria_db_3_3',		'new_ink'  => false	);		static $options = array(	);	function DBConfig() {			$this->file 		 = "_dbconfig.ini";				//$this->fileContent = split('\n', file_get_contents($file));		$this->fileContent = split('\n', file_get_contents($GLOBALS['file']));				// Recupera os valores		$this->db_host	 = catchValue($GLOBALS['fileContent[0]']);		$this->db_user 	 = catchValue($GLOBALS['fileContent[1]']);		$this->db_password = catchValue($GLOBALS['fileContent[2]']);		$this->db_database = catchValue($GLOBALS['fileContent[3]']);	}}?>

o erro

Parse error: parse error, unexpected T_VARIABLE in ..._dbconfig.php on line 25

e a linha 25 é:

'hostspec' => $this->db_host,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, consegui certo avanço, como o colega disse realmente tenho que iniciar as variáveis no constructor. "Descobri" também que devo criar um getter e setter para as variáveis que quero acessar. Mas um problema continua, não consigo atribuir a um valor do array, o valor de uma certa variável.

 

<?phpclass DBConfig{	static $debug	= TRUE;	// Arquivo de configuração do database		public static $file;	// Recupera o conteúdo do arquivo	public static $fileContent;		// Recupera os valores	static private $db_host;	static private $db_user;	static private $db_password;	static private $db_database;		static $dsn = array(		'phptype'  => 'mysql',		'dbsyntax' => false,		'username' => self::getUser,		'password' => false,		'protocol' => false,		'hostspec' => '10.0.0.13',		'port'	 => false,		'socket'   => false,		'database' => 'event_secretaria_db_3_3',		'new_ink'  => false	);		static $options = array(	);	//function DBConfig() {	function __construct() {		self::setFile( "_dbconfig.ini" );				self::setFileContent( self::$file );	}	/* Setters */	public final function setFile( $file )	{		self::$file = $file;	}	public final function setFileContent( $fileContent )	{		$content = split("\n", file_get_contents( $fileContent ));		self::setHost( catch_Value($content[0]) );		self::setUser( catch_Value($content[1]) );		self::setPassword( strlen(catch_Value($content[2]))>0?catch_Value($content[2]):false );		self::setDatabase( catch_Value($content[3]) );	}		public final function setHost( $host )	{		self::$db_host = $host;	}	public final function setUser( $user )	{		self::$db_user = $user;	}	public final function setPassword( $pass )	{		self::$db_password = $pass;	}	public final function setDatabase( $db )	{		self::$db_database = $db;	}		/* Getters */	public final function getHost()	{		return self::$db_host;	}	public final function getUser()	{		return self::$db_user;	}	public final function getPassword()	{		return self::$db_password;	}	public final function getDatabase()	{		return self::$db_database;	}			public final function getX()	{		return self::$dsn;	}}// Recupera o valor da chave no .inifunction catch_Value( $str ) {	return trim(substr($str, strpos($str, "=")+1 ));}?>

Na linha

'username' => self::getUser,

o valor retornado pelo username é (self::getUser), invés de ser o que recupera do arquivo, tentei setar de outras formas;

'username' => $this->$db_user, e assim'username' => $db_user,
mas nenhuma funcionou :(

 

alguma ideia por gentileza?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ops, malz, eu tentei dessa forma que tu falou mesmo, quando fui digitar é que coloquei errado. Malz...

Compartilhar este post


Link para o post
Compartilhar em outros sites
assim da erro de sintaxe nego, o correto é $this->var

sem o "$" antes de var

 

Na realidade, é possível fazer $this->$var para o seguinte exemplo:

 

$var = "nome";
echo $this->$var; // é o mesmo que $this->nome;

Compartilhar este post


Link para o post
Compartilhar em outros sites

você está declarando as variáveis como static. $this não é permitido em métodos/classes estáticas. Use a notação classe::atributo.

 

E se tiver paciência, leia isso:

http://www.zend.com/php5/articles/engine2-...s.php#Heading14

 

Para solucionar o seu problema, corrija:

'username' => self::getUser,
para:

'username' => self::getUser(),
Pois getUser é um método.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é, tb tentei isso, mas dá erro em "tempo de compilação" (Eclipse PHP), e sem as aspas não pega o valor correto, so falta isso pra terminar esse lance :(Chato...já estou pra desistir.HEELP! heheObrigado caras, alguma ideia??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resumindo, já tentei usar:

 

static $dsn = array(		'phptype'  => 'mysql',		'dbsyntax' => false,		'username' => $this->db_user,			...estatic $dsn = array(		'phptype'  => 'mysql',		'dbsyntax' => false,		'username' => $this->$db_user,		   ...estatic $dsn = array(		'phptype'  => 'mysql',		'dbsyntax' => false,		'username' => self::getUser(),		   ...estatic $dsn = array(		'phptype'  => 'mysql',		'dbsyntax' => false,		'username' => self::getUser,		   ...

Nenhum deu certo, :( alguem tem uma luz?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvi, depois posto a solução :D

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.