Pierwsze pytanie na temat SO i jest to prawdziwy kandydat na RTM. Ale obiecuję ci, że szukałem i nie mogę tego znaleźć. Z radością zrobię # headpalm, gdy okaże się, że jest to prosta rzecz, której przegapiłem.
Próbując rozgryźć Zend Framework i natrafiłem na następującą składnię:
$this->_session->{'user_id'}
Nigdy nie widziałem składni nawiasów klamrowych używanej do uzyskiwania dostępu do czegoś, co wydaje się być zmienną składową. Czym różni się od
$this->_session->user_id
Zakładam, że sesja _ jest nieistotna, ale uwzględniam ją w pytaniu, ponieważ może nie być.
Czy nawiasy klamrowe są tylko konwencją czystości, która próbuje opakować nazwę zmiennej złożonej user_id? A może to jakiś specjalny dodatek?
Wszelkie wskazówki dotyczące TFM, abym mógł R up, byłyby pokornie docenione.
Wielkie dzięki. Proszę bądź delikatny.
źródło
$obj->$method($params)
Odpowiedzi:
Nawiasy klamrowe służą do jawnego określenia końca nazwy zmiennej. Na przykład:
echo "This square is {$square->width}00 centimeters broad.";
Więc twoja sprawa to tak naprawdę połączenie dwóch specjalnych przypadków. Masz dostęp do zmiennych klas za pomocą nawiasów klamrowych i tak dalej:
$class->{'variable_name'} // Same as $class->variable_name $class->{'variable' . '_name'} // Dynamic values are also allowed
W twoim przypadku po prostu otaczasz je składnią nawiasów klamrowych.
Zobacz podręcznik PHP , „złożona (kędzierzawa) składnia”.
źródło
Znam składnię tylko wtedy, gdy używam zmiennych zmiennych :
$userProp = 'id'; $this->_session->{'user_'.$userProp};
źródło
Prawdopodobnie istnieje jedna duża zaleta tej składni, jednak generalnie jest ona w domenie włochatych rzeczy i rzeczy, których prawdopodobnie chcesz uniknąć.
Pozwala na używanie znaków w nazwach zmiennych, które w innym przypadku są niedozwolone.
to znaczy:
$this->object->{"hello world\0\n"} $this->object->{"function(){ this is a truely awful name for a variable }"}
źródło
W podanym przykładzie nie ma prawdziwej różnicy i
$this->_session->user_id
należy użyć IMO, ponieważ jest bardziej przejrzysty.W rzeczywistości składnia nawiasów klamrowych jest dobra, to uzyskanie dostępu do zmiennej składowej poprzez skonstruowanie wyrażenia dla jej nazwy, na przykład
$this->_session->{'user_id' . $index}
.źródło
Dwa przykłady w twoim pytaniu robią to samo. PHP umożliwia dostęp do danych / metod członków na kilka sposobów ...
object->{'name_of_member'}; object->name_of_member; $member = 'name_of_member'; object->$member;
źródło