如何使用减号访问对象属性?

Kev*_*jan 12 php object

我有一个对象(在PHP中),我无法打印内容.在调试模式下,它是这样的:

stdClass Object
(
    [pre-selection] => 1
)
Run Code Online (Sandbox Code Playgroud)

但由于减号,我无法打印'预选'.

echo $object->pre-selection; //doens't work.
Run Code Online (Sandbox Code Playgroud)

我怎么打印出来?谢谢.

Ste*_*ins 37

你可以试试

$object->{'pre-selection'};
Run Code Online (Sandbox Code Playgroud)

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

?>
Run Code Online (Sandbox Code Playgroud)

更新(感谢salathe):

也可以使用卷曲括号来清楚地界定属性名称.当访问包含数组的属性中的值,属性名称由多个部分组成时,或者属性名称包含其他方式无效的字符时,它们最有用


hak*_*kre 7

有多种方法,问题是PHP令牌化器会阻塞-代码中的符号,如何编写它以便解析器不会抱怨:

echo $object->{'pre-selection'};
Run Code Online (Sandbox Code Playgroud)

要么

$property = 'pre-selection'
echo $object->$property;
Run Code Online (Sandbox Code Playgroud)

要么

$array = (array) $object;   
echo $array['pre-selection'];
Run Code Online (Sandbox Code Playgroud)

在这些情况下,PHP解析器不会在原始代码中运行,因为它有问题需要再解析.


想知道这在哪里记录.例如,在SimpleXML文档中:

访问包含PHP命名约定下不允许的字符的XML文档中的元素(例如连字符)可以通过将元素名称封装在大括号和撇号中来实现.

示例#3获取<line>

<?php
include 'example.php';

$movies = new SimpleXMLElement($xmlstr);

echo $movies->movie->{'great-lines'}->line;
?>
Run Code Online (Sandbox Code Playgroud)

上面的例子将输出:

PHP solves all my web problems
Run Code Online (Sandbox Code Playgroud)