我有一个对象(在PHP中),我无法打印内容。 在调试模式中,它是这样的:
stdClass Object
(
[pre-selection] => 1
)
但由于减号,我无法打印'预选'。
echo $object->pre-selection; //doens't work.
如何打印出来?感谢。
答案 0 :(得分:34)
你可以尝试
$object->{'pre-selection'};
http://php.net/manual/en/language.types.string.php#language.types.string.parsing.complex
的例2示例#2访问无效对象属性
访问包含字符的对象中的元素 允许根据PHP的命名约定(例如连字符) 通过将元素名称封装在大括号和 撇号。
<?php $json = '{"foo-bar": 12345}'; $obj = json_decode($json); print $obj->{'foo-bar'}; // 12345 ?>
也可以使用大括号,以清楚地界定属性名称。当访问包含数组的属性中的值时,当属性名称由多个部分组成时,它们最有用;或者当属性名称包含无效的字符时
答案 1 :(得分:7)
有多种方法,问题是PHP tokenizer会阻塞代码中的-
符号,你可以编写它以便解析器不会抱怨:
echo $object->{'pre-selection'};
或
$property = 'pre-selection'
echo $object->$property;
或
$array = (array) $object;
echo $array['pre-selection'];
在这些情况下,PHP解析器不会在原始代码中运行,因为它有问题需要解析。
想知道记录的位置。例如,在SimpleXML documentation:
中通过将元素名称封装在大括号和撇号中,可以访问包含PHP命名约定下不允许的字符的XML文档中的元素(例如连字符)。
示例#3获取&lt; line&gt;
<?php include 'example.php'; $movies = new SimpleXMLElement($xmlstr); echo $movies->movie->{'great-lines'}->line; ?>
以上示例将输出:
PHP solves all my web problems