Ir para conteúdo

POWERED BY:

Arquivado

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

Douglas

Variáveis Pré-definidas em class

Recommended Posts

Galera...

 

Estou tentando carregar uma variável pré-definida para trabalhar em uma classe, mas parece que o PHP não permite.

 

(Para ilustrar):

class Classe {
	public $variavel = $_SERVER['QUERY_STRING']
}

Isso irá causar um erro:

 

Parse error: syntax error, unexpected T_VARIABLE

Estava inicialmente contornando esse problema, setando o valor com a função magica __construct(), mas agora estou trabalhando com funções estáticas (static), e com isso o __contruct(), não é executado.

 

 

Existe alguma forma de carregar uma variável pré-definida, ao carregar uma classe, sem usar o __construct()?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro não é porcausa do ponto e virgula no final.

 

Mesmo assim meu exemplo faltava o ponto e virgula :)

 

Mas o problema persiste.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Defina como Static.

 

class Lol {
 public static $xd = $_SERVER['QUERY_STRING'];
 }
 
 $lol = new Lol;
 echo $lol->xd;
:]

Você executou esse código? (Aqui ocorre o mesmo erro).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não pode declarar uma propriedade de uma classe tendo como valor o conteúdo de uma variável externa.

Uma alternativa seria criar um método construtor para valorizar a propriedade, ou então um metodo que faça isso.

 

Sempre que fizer isso vai obter erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não pode declarar uma propriedade de uma classe tendo como valor o conteúdo de uma variável externa.

Uma alternativa seria criar um método construtor para valorizar a propriedade, ou então um metodo que faça isso.

 

Sempre que fizer isso vai obter erro.

Valeu Marcio. :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

A única maneira que eu consegui, foi essa(agora executando o código :P):

<?php
class Teste {
	public static $teste;
	public function __construct(){
		$this->teste = "lol";
	}
}
$teste = new Teste();
echo $teste->teste;
?>
Mas, creio eu, que você necessitará carregar a função, considerando que você pega a variável da Instância da classe, não da classe em si. Pensei que poderia ser feito na declaração, porque assim o é permitido em ruby, desde que seja atribuído à variável o attr certo(attr_reader,attr_writer ou attr_accessor).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode chamar, dentro do método estático, o que define o valor da variável. Por exemplo:

 

class Classe
{
	private static $var;

	private static function Definir()
	{
		self::$var = $_SERVER['VARIAVEL_PRE_DEFINIDA'];
	}

	public static function Teste()
	{
		self::Definir();
		echo self::$var;
	}
}

Chamando Teste(), a variável também é definida.

É outra solução. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu gostaria de setar diretamente, sem a necessidade de criar outros metódos. (Apenas por comodidade).

 

Infelizmente não posso usar o método __construct(), pois estou trabalhando com metodos estáticos, como eu acesso diretamente o metódo o __construct() não é executado.

 

---

A solução foi criar um metódo novo mesmo. :)

--

 

Alguém saberia me responder o porque o não deixa setar uma propriedade com um valor de variável externa? (existe alguma explicação?)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu já tinha percebido isso, mas nunca tentei descobrir por que isso ocorria.

 

Veja o que encontrei no Manual:

 

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).

 

<?php
class 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. . . */
	}
}
?>
Fomte: http://www.php.net/manual/pt_BR/language.oop.php

 

Apesar de estar escrito PHP 4 ali, acho que é apenas falta de atualizaçào, pois isso ocorre no 5 também. Inclusive, este código funciona perfeitamente:

 

define("CONSTANTE", "Valor constante");

class Classe
{
	public $var1 = CONSTANTE;
}

$C = new Classe();
echo $C->var1;

 

Isso apenas reforça nossa constatação. Mas não esclarece o motivo.

Vou continuar pesquisando. Se eu encontrar resposta, posto aqui. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

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.