Syntaxe d'Accolade PHP pour la variable membre
Première question sur SO et c'est un vrai candidat RTM. Mais je vous promets que j'ai regardé et que je n'arrive pas à le trouver. Je vais heureusement faire un # headpalm quand il s'avère être une chose simple que j'ai manqué.
Essayer de comprendre Zend Framework et est tombé sur la syntaxe suivante:
$this->_session->{'user_id'}
Je n'ai jamais vu la syntaxe des accolades utilisées pour accéder à ce qui semble être une variable membre. En quoi est-ce différent de
$this->_session->user_id
Je suppose que la _session n'est pas pertinente, mais y compris dans la question car il ne peut pas être.
Les accolades sont-elles juste une convention de propreté qui tente d'envelopper le nom de variable composé user_id? Ou est-ce une sorte d'accesseur spécial?
Tous les pointeurs dans TFM afin que je puisse R up seraient humblement appréciés.
Merci beaucoup. Soyez doux.
5 réponses
Accolades sont utilisées pour spécifier explicitement la fin d'un nom de variable. Par exemple:
echo "This square is {$square->width}00 centimeters broad.";
Donc, votre cas est vraiment une combinaison de deux cas particuliers. Vous êtes autorisé à accéder aux variables de classe en utilisant des accolades et comme ceci:
$class->{'variable_name'} // Same as $class->variable_name
$class->{'variable' . '_name'} // Dynamic values are also allowed
Et dans votre cas, vous les entourez simplement de la syntaxe des accolades.
Voir le manuel PHP , " syntaxe complexe (bouclée)."
Je connais la syntaxe juste en utilisant variables variables :
$userProp = 'id';
$this->_session->{'user_'.$userProp};
Il y a probablement un gros avantage de cette syntaxe, cependant, c'est généralement dans le domaine des choses poilues, et des choses que vous voulez probablement éviter.
Il vous permet d'utiliser des caractères dans les noms de variables qui ne sont pas autorisés autrement.
Exemple:
$this->object->{"hello world\0\n"}
$this->object->{"function(){ this is a truely awful name for a variable }"}
Dans l'exemple que vous donnez, il n'y a pas de vraie différence, et IMO $this->_session->user_id
devrait être utilisé car c'est plus clair.
Ce que la syntaxe des accolades est réellement bonne, c'est d'accéder à une variable membre en construisant une expression pour son nom, comme $this->_session->{'user_id' . $index}
.
Les deux exemples de votre question font la même chose. PHP vous permet d'accéder aux données/méthodes des membres de plusieurs façons...
object->{'name_of_member'};
object->name_of_member;
$member = 'name_of_member';
object->$member;