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

时间:2012-08-13 18:33:15

标签: php object

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

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

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

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

如何打印出来?感谢。

2 个答案:

答案 0 :(得分:34)

你可以尝试

$object->{'pre-selection'};

http://php.net/manual/en/language.types.string.php#language.types.string.parsing.complex

另见json_decode()

的例2
  

示例#2访问无效对象属性

     

访问包含字符的对象中的元素   允许根据PHP的命名约定(例如连字符)   通过将元素名称封装在大括号和   撇号。

<?php

$json = '{"foo-bar": 12345}';

$obj = json_decode($json);
print $obj->{'foo-bar'}; // 12345

?>

更新(感谢salathe):

  

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

答案 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