Première question sur SO et c'est un vrai RTM candidat. Mais je vous promets que j'ai regardé et que je n'arrive pas à le trouver. Je serai heureux faire un #headpalm quand il s'avère que c'est quelque chose de 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 d'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 l'inclure dans la question car elle ne l'est peut-être pas.
Les accolades sont-elles simplement une convention de propreté qui tente d'envelopper le nom de variable composé user_id? Ou est-ce une sorte d'accesseur spécial?
Tout pointeur dans TFM pour que je puisse remonter serait humblement apprécié.
Merci beaucoup. Soyez gentil s'il vous plait.
Les 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 spéciaux. Vous êtes autorisé à accéder aux variables de classe en utilisant des accolades et ainsi de suite:
$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 PHP manual , "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 trucs velus, et des choses que vous voulez probablement éviter.
Il vous permet d'utiliser des caractères dans des noms de variables qui ne sont pas autorisés autrement.
c'est à dire:
$this->object->{"hello world\0\n"}
$this->object->{"function(){ this is a truely awful name for a variable }"}
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 manières ...
object->{'name_of_member'};
object->name_of_member;
$member = 'name_of_member';
object->$member;
Dans l'exemple que vous donnez, il n'y a pas de réelle différence, et IMO $this->_session->user_id
doit être utilisé car il est plus clair.
La syntaxe des accolades est en fait utile pour accéder à une variable membre en construisant une expression pour son nom, comme $this->_session->{'user_id' . $index}
.