Erste Frage zu SO und es ist ein echter RTM-Kandidat. Aber ich verspreche dir, ich habe gesucht und kann es nicht finden. Ich mache gerne einen #headpalm, wenn sich herausstellt, dass es eine einfache Sache ist, die ich verpasst habe.
Beim Versuch, Zend Framework herauszufinden, stieß ich auf die folgende Syntax:
$this->_session->{'user_id'}
Ich habe noch nie die Syntax geschweifter Klammern gesehen, mit der auf eine scheinbar Mitgliedsvariable zugegriffen wird. Wie ist es anders als
$this->_session->user_id
Ich gehe davon aus, dass die Sitzung irrelevant ist, aber ich nehme sie in die Frage auf, da dies möglicherweise nicht der Fall ist.
Sind die geschweiften Klammern nur eine Sauberkeitskonvention, die versucht, den zusammengesetzten Variablennamen user_id zu umbrechen? Oder ist es eine Art spezieller Accessor?
Alle Hinweise in TFM, damit ich R up kann, wäre demütig dankbar.
Danke vielmals. Bitte sei höflich.
quelle
$obj->$method($params)
Antworten:
Geschweifte Klammern werden verwendet, um das Ende eines Variablennamens explizit anzugeben. Zum Beispiel:
echo "This square is {$square->width}00 centimeters broad.";
Ihr Fall ist also wirklich eine Kombination aus zwei Sonderfällen. Sie können mit geschweiften Klammern auf Klassenvariablen zugreifen und so:
$class->{'variable_name'} // Same as $class->variable_name $class->{'variable' . '_name'} // Dynamic values are also allowed
Und in Ihrem Fall umgeben Sie sie nur mit der Syntax für geschweifte Klammern.
Siehe das PHP-Handbuch "Komplexe (lockige) Syntax".
quelle
Ich kenne die Syntax nur bei Verwendung von Variablenvariablen :
$userProp = 'id'; $this->_session->{'user_'.$userProp};
quelle
Es gibt wahrscheinlich einen großen Vorteil dieser Syntax, sie liegt jedoch im Allgemeinen im Bereich haariger Dinge und Dinge, die Sie wahrscheinlich vermeiden möchten.
Sie können Zeichen in Variablennamen verwenden, die ansonsten nicht zulässig sind.
dh:
$this->object->{"hello world\0\n"} $this->object->{"function(){ this is a truely awful name for a variable }"}
quelle
In dem Beispiel, das Sie geben, gibt es keinen wirklichen Unterschied, und IMO
$this->_session->user_id
sollte verwendet werden, weil es klarer ist.Die Syntax für geschweifte Klammern ist eigentlich gut für den Zugriff auf eine Mitgliedsvariable, indem ein Ausdruck für ihren Namen erstellt wird, wie z
$this->_session->{'user_id' . $index}
.quelle
Die beiden Beispiele in Ihrer Frage machen dasselbe. Mit PHP können Sie auf verschiedene Arten auf Mitgliedsdaten / -methoden zugreifen ...
object->{'name_of_member'}; object->name_of_member; $member = 'name_of_member'; object->$member;
quelle