Альтернативный синтаксис для доступа к переменной класса в PHP - PullRequest
2 голосов
/ 12 ноября 2010

Я только что наткнулся на интересный синтаксис в PHP-скрипте:

echo $foo->{'bar'};

В этом случае $ foo - это объект, возвращаемый из функции PHP json_decode (), но он хорошо работает при доступе к открытым членам любого объекта.

Я попытался выяснить, почему этот синтаксис использовался вместо более распространенного:

echo $foo->bar;

Предоставляет ли доступ к члену класса с синтаксисом из первого примера что-то особенное по сравнению со вторым примером?

Ответы [ 3 ]

4 голосов
/ 12 ноября 2010

Синтаксис фигурных скобок полезен, когда вы хотите сослаться на имя функции в виде строки:

print $foo->{'aMemberFunc'}();

Когда вы хотите получить доступ к членам, имя которых предоставлено другой функцией (или переменной).

Здесь getVarName() возвращает строку, которая может использоваться для ссылки на член внутри объекта $ foo.

print $foo->{getVarName()};

Без фигурных скобок это будет $foo->getVarName(), и он попытается запустить этот метод ... с фигурными скобками это будет иметь совершенно другое значение.

echo $foo->{'bar'}; и echo $foo->bar; идентичны, насколько я могу судить.

1 голос
/ 12 ноября 2010

первый синтаксис позволяет вам обращаться к свойствам с помощью '-', часто используемым в JSON.

0 голосов
/ 12 ноября 2010

Преимущество заключается в том, что вы можете иметь имена переменных, которые не соответствуют правилам именования переменных-членов.

Это может показаться плохой идеей, и обычно так оно и есть, но для этого есть смысл. Например, если вы пишете приложение, которое позволяет его пользователям добавлять произвольные поля с удобочитаемыми именами, но при этом быть доступным для плагинов и т. Д.

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