Вопрос о синтаксисе доступа к объекту PHP с помощью $ - PullRequest
2 голосов
/ 09 июня 2010

У меня были проблемы с поиском этого ответа, потому что я не совсем уверен, как его сформулировать.Я новичок в PHP и все еще держусь на ногах.Я писал страницу с классом, в котором было имя свойства.Когда я изначально писал страницу, класса не было, поэтому у меня была переменная с именем $name.Когда я пошел заключать его в класс, я случайно изменил его на $myClass->$name.Мне понадобилось некоторое время, чтобы понять, что мне нужен синтаксис $myClass->name.Причиной, по которой это заняло так много времени, была ошибка, которую я продолжал получать: «Попытка доступа к нулевому свойству» или что-то в этом роде.Ошибка привела меня к мысли, что это была ошибка заполнения данных.

Мой вопрос имеет ли $myClass->$name правильное значение?Другими словами, есть ли время, когда вы могли бы использовать это, и причина, почему это не создает синтаксическую ошибку?Если так, каково семантическое значение этого кода?Когда я буду использовать его, если он действителен?Если он недействителен, есть ли причина, по которой он не создает синтаксическую ошибку?

Ответы [ 3 ]

3 голосов
/ 09 июня 2010

Да.

$name = "bar";
echo $myClass->$name; //the same as $myClass->bar

Я согласен, сообщение об ошибке не очень полезно.

2 голосов
/ 09 июня 2010

Читать о переменных переменных :

Свойства класса также могут быть доступны с помощью имен свойств переменных.Имя свойства переменной будет разрешено в пределах области, из которой выполняется вызов.Например, если у вас есть выражение, такое как $ foo->$bar, то локальная область будет проверена на $bar, а ее значение будет использоваться в качестве имени свойства из $foo.Это также верно, если $bar - доступ к массиву.

0 голосов
/ 09 июня 2010

$myClass->$name - это «имя свойства переменной».Он обращается к свойству, имя которого находится в переменной $name в виде строки.Причина, по которой вы получили ошибки «нулевого свойства», заключалась в том, что у вас не было переменной с именем $name (или null)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...