2010-07-13 2 views
17

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

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

Parse error: syntax error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '{' or '$'

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

+0

Я знаю, что вы работаете над существующим кодом, но ради полноты я хочу добавить, что следует избегать использования переменных, которые принудительно используют синтаксис фигурного скобки. «Обычное» использование имен переменных просто лучше известно и легче читать. –

+0

Я просто [ответил] (http://stackoverflow.com/a/10333200/50079) аналогичный вопрос; если у вас возникают проблемы с атрибутом, который является ** всеми номерами **, вы найдете решение там. – Jon

ответ

29

Что об этом:

$Beeblebrox->{'2ndhead'} 


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

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

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

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

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


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

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


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

А вот еще один, что дает некоторую additionnal информации о том, как те, разобраны: PHP grammar notes

+0

Да, это все! Вы ответили, прежде чем я смог! :) –

+0

быстрее на 10 секунд ^^ –

+0

Если вы хотите уточнить, почему это работает и нужно (может быть, вы знаете больше, чем я?), Это сделало бы эту страницу более полезной и интересной. –

5

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

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

$Beeblebrox->{'2ndhead'} 

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

Смежные вопросы