Как я могу получить доступ к атрибуту объекта, который начинается с числа? - PullRequest
21 голосов
/ 13 июля 2010

Я работаю над существующей кодовой базой и вернул объект с атрибутом, который начинается с числа, которое я вижу, если я вызову print_r для объекта.

Скажем, это $Beeblebrox->2ndhead. Когда я пытаюсь получить к нему доступ таким образом, я получаю сообщение об ошибке:

Ошибка разбора: синтаксическая ошибка, неожиданный T_LNUMBER, ожидаемый T_STRING или T_VARIABLE или '{' или '$'

Как я могу получить этот атрибут?

Ответы [ 2 ]

38 голосов
/ 13 июля 2010

Что по этому поводу:

$Beeblebrox->{'2ndhead'}


На самом деле, вы можете сделать это практически для любой переменной, даже для тех, которые не являются свойствами класса.

Например, вы можете подумать об имени переменной, содержащей пробелы; будет работать следующий синтаксис:

${"My test var"} = 10;
echo ${"My test var"};

Даже если, очевидно, вы не сможете сделать ничего подобного:

$My test var = 10;
echo $My test var;


Хотя понятия не имею, как это работает внутри ... И после небольшого поиска я ничего не могу найти в руководстве по PHP.

Единственное, что я могу найти о {} и переменных здесь: Разбор переменных - но не совсем связанный с текущей темой ...


Но вот статья, которая показывает несколько других возможностей и идет дальше, чем примеры, которые я выложил здесь: Имена переменных PHP: Curly Brace Madness

А вот еще один, который дает некоторую дополнительную информацию о том, как они анализируются: Примечания грамматики PHP

5 голосов
/ 13 июля 2010

Я действительно узнал ответ от коллеги, прежде чем спросил об этом, но не смог найти его в Google, поэтому я хотел опубликовать его здесь на тот случай, если у других возникнет такая же проблема.

Я могу получить доступ к этому атрибуту так:

$Beeblebrox->{'2ndhead'}

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

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