Как получить доступ к объекту со знаком минус?

Я получил объект (на PHP), и я не могу распечатать его. В режиме отладки это выглядит так:

stdClass Object ( [pre-selection] => 1 ) 

Но я не могу напечатать «предварительный отбор» из-за знака минус.

 echo $object->pre-selection; //doens't work. 

Как я могу распечатать это? Благодарю.

Вы можете попробовать

 $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):

Также можно использовать фигурные скобки , чтобы четко разграничить имя свойства. Они наиболее полезны при доступе к значениям внутри свойства, содержащего массив, когда имя свойства составлено из нескольких частей, или когда имя свойства содержит символы, которые в ином случае недействительны

Есть несколько способов, проблема в том, что токенизатор 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