2012-10-09 3 views
1

Lorsque j'essaie de faire ce qui suit, j'obtiens un syntax error, unexpected T_VARIABLE. Qu'est-ce que je fais mal?Accéder à un attribut d'objet dans un autre attribut

class myObj { 
    public $birth_month; 
    public $birthday = array('input_val' => $this->birth_month); 
} 

J'ai aussi essayé

class myObj { 
    public $birth_month; 
    public $birthday = array('input_val' => $birth_month); 
} 

Répondre

3

Vous ne pouvez pas utiliser une expression pour initialiser une propriété de classe. Il doit s'agir d'une valeur constante ou vous devez l'initialiser dans le constructeur. C'est la source de votre erreur de syntaxe.

class myObj { 
    public $birth_month; 
    public $birthday; 

    // Initialize it in the constructor 
    public function __construct($birth_month) { 
    $this->birth_month = $birth_month; 
    $this->birthday = array('input_val' => $this->birth_month); 
    } 
} 

From the docs on class properties:

Ils sont définis en utilisant l'un des mots-clés publics, protégés ou privés, suivie d'une déclaration de variable normale. Cette déclaration peut inclure une initialisation, mais cette initialisation doit être une valeur constante, c'est-à-dire qu'elle doit pouvoir être évaluée au moment de la compilation et ne pas dépendre des informations d'exécution pour être évaluée.

Dans votre première tentative, en utilisant $this en dehors d'une méthode d'instance n'aurait pas été pris en charge même mettant à nu la limitation de la compilation de l'initialisation de la propriété, puisque $this n'a de sens que dans les méthodes d'instance.

0

$ cela n'existe pas en dehors d'une méthode non statique de votre classe. De plus, au moment de l'initialisation, il n'y a pas encore $. Initialisez votre tableau dans la méthode constuctor.

Questions connexes