79 votes

Syntaxe d'accolade PHP pour la variable membre

Première question DONC, et c'est un vrai RTFM candidat. Mais je vous promets, j'ai regardé, et n'arrive pas à trouver. Je vais heureux de faire un #headpalm lorsqu'il s'avère être une chose très simple que j'ai manqué.

Essayer de comprendre le Zend Framework et est venu à travers la syntaxe suivante:

$this->_session->{'user_id'}

Je n'ai jamais vu les accolades de la syntaxe utilisée pour accéder à ce qui semble être une variable membre. Comment est-il différent de

$this->_session->user_id

Je suis en supposant que le _session n'est pas pertinent, mais y compris dans la question, car il peut ne pas l'être.

Sont les accolades juste une propreté convention qui tente d'enrouler le composé du nom de la variable user_id? Ou est-ce une sorte de spécial accesseur?

Tous les pointeurs en TFM afin que je puisse R il serait humblement apprécié.

Merci beaucoup. Soyez doux.

51voto

James Skidmore Points 13628

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 à l'aide d'accolades et de la sorte:

$class->{'variable_name'} // Same as $class->variable_name
$class->{'variable' . '_name'} // Dynamic values are also allowed

Et dans votre cas, vous êtes juste en les entourant de l'accolade de la syntaxe.

Voir le manuel PHP, "complexe (bouclés) de la syntaxe."

24voto

Gumbo Points 279147

Je connais la syntaxe juste en utilisant des variables variables :

 $userProp = 'id';
$this->_session->{'user_'.$userProp};
 

19voto

Kent Fredric Points 35592

Il ya probablement un gros avantage de cette syntaxe, cependant, c’est généralement dans le domaine des poils, et des choses que vous voudrez probablement éviter.

Il vous permet d’utiliser des caractères dans des noms de variables qui ne sont pas autorisés.

c'est à dire:

 $this->object->{"hello world\0\n"} 
$this->object->{"function(){   this is a truely awful  name for a variable }"}
 

11voto

chaos Points 69029

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 c'est plus clair.

La syntaxe entre accolades est utile pour accéder à une variable membre en construisant une expression pour son nom, telle que $this->_session->{'user_id' . $index} .

11voto

Donnie DeBoer Points 1632

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;
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X