Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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']
}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()?
O erro não é porcausa do ponto e virgula no final.
Mesmo assim meu exemplo faltava o ponto e virgula :)
Mas o problema persiste.
Defina como Static.
class Lol {
public static $xd = $_SERVER['QUERY_STRING'];
}
$lol = new Lol;
echo $lol->xd;:]>
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).
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.
>
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. :)
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).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;
}
}É outra solução. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
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?)
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
Interessante Beraldo.. :)
no teu exemplo
class Classe {
//FALTA A VIRGULA NO FINAL DA LINHA E O ERRO PARECE SER ESSE.