Как получить доступ к объекту со знаком минус?
У меня есть объект (в PHP), и я не могу распечатать его.
В режиме отладки это выглядит так:
stdClass Object
(
[pre-selection] => 1
)
Но я не могу напечатать "предварительный выбор" из-за знака минус.
echo $object->pre-selection; //doens't work.
Как я могу распечатать это? Спасибо.
Ответы
Ответ 1
Вы можете попробовать
$object->{'pre-selection'};
http://php.net/manual/en/language.types.string.php#language.types.string.parsing.complex
См. также пример 2 json_decode()
Пример # 2 Доступ к свойствам недействительных объектов
Доступ к элементам внутри объекта, который содержит символы, не разрешенный в соответствии с соглашением об именовании PHP (например, дефис), может быть выполняется путем инкапсуляции имени элемента в фигурные скобки и апостроф.
<?php
$json = '{"foo-bar": 12345}';
$obj = json_decode($json);
print $obj->{'foo-bar'}; // 12345
?>
Обновление (спасибо salathe):
Можно также использовать фигурные скобки, чтобы четко разграничить имя свойства. Они наиболее полезны при доступе к значениям внутри свойства, содержащего массив, когда имя свойства составлено из нескольких частей, или , когда имя свойства содержит символы, которые в противном случае не действительны.
Ответ 2
Существует несколько способов, проблема заключается в том, что токенизатор PHP будет задыхаться от знака -
в коде, поэтому вы можете написать его так, чтобы синтаксический анализатор не жаловался:
echo $object->{'pre-selection'};
или
$property = 'pre-selection'
echo $object->$property;
или
$array = (array) $object;
echo $array['pre-selection'];
В этих случаях парсер PHP не запускается вокруг места в необработанном коде, в котором у него есть проблема для более синтаксического анализа.
Интересно, где это задокументировано. Например, в документации SimpleXML:
Доступ к элементам в документе XML, который содержит символы, не разрешенные в соответствии с соглашением об именах PHP (например, дефис), может быть выполнен путем инкапсуляции имени элемента в фигурные скобки и апострофа.
Пример # 3 Получение <line>
<?php
include 'example.php';
$movies = new SimpleXMLElement($xmlstr);
echo $movies->movie->{'great-lines'}->line;
?>
Вышеприведенный пример выводит:
PHP solves all my web problems