我有一个对象(在 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
另见示例 2json_decode()
Example #2 访问无效的对象属性
访问对象中包含 PHP 命名约定不允许的字符(例如连字符)的元素可以通过将元素名称封装在大括号和撇号中来完成。
<?php $json = '{"foo-bar": 12345}'; $obj = json_decode($json); print $obj->{'foo-bar'}; // 12345 ?>
也可以使用花括号来明确界定属性名称。在访问包含数组的属性中的值、属性名称由多个部分组成或属性名称包含其他无效字符时,它们最有用
有多种方法,问题是 PHP 标记器会阻塞-
代码中的符号,但是您可以编写它以便解析器不会抱怨:
echo $object->{'pre-selection'};
或者
$property = 'pre-selection'
echo $object->$property;
或者
$array = (array) $object;
echo $array['pre-selection'];
在这些情况下,PHP 解析器不会在原始代码中存在无法解析的问题的地方运行。
想知道这是在哪里记录的。例如在SimpleXML 文档中:
访问 XML 文档中包含 PHP 命名约定不允许的字符(例如连字符)的元素,可以通过将元素名称封装在大括号和撇号中来完成。
Example #3 获取 <line>
<?php include 'example.php'; $movies = new SimpleXMLElement($xmlstr); echo $movies->movie->{'great-lines'}->line; ?>
上面的示例将输出:
PHP solves all my web problems