【问题标题】:How to access an object property with a minus-sign?如何访问带有减号的对象属性?
【发布时间】:2012-08-10 00:47:32
【问题描述】:

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

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

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

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

如何打印出来?谢谢。

【问题讨论】:

标签: php object


【解决方案1】:

你可以试试

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

也可以使用花括号,以明确界定属性名称。它们在访问包含数组的属性中的值、属性名称由多个部分组成时或属性名称包含无效字符时最有用

【讨论】:

  • 谢谢,不知道你能做到这一点;)当我把单引号放在一起时,它就可以工作了。 $object->{'预选'};
  • 该手册的链接是关于其他内容的(但写得有点相似)。
  • fewplaces 中提到了语法。但是,variable properties 下没有提到它。
  • 对于它的价值,我已经更新了“变量属性”部分以提及花括号语法。 (更改将在更新后的下周末可见。)
  • @salathe:谢谢,非常有帮助!
【解决方案2】:

有多种方法,问题是PHP分词器会卡在代码中的-符号上,但是你可以编写它以便解析器不会报错:

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

$property = 'pre-selection'
echo $object->$property;

$array = (array) $object;   
echo $array['pre-selection'];

在这些情况下,PHP 解析器不会在原始代码中存在无法解析的问题的地方运行。


想知道这是在哪里记录的。例如在SimpleXML documentation:

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

示例 #3 获取

<?php
include 'example.php';

$movies = new SimpleXMLElement($xmlstr);

echo $movies->movie->{'great-lines'}->line;
?>

上面的例子会输出:

PHP solves all my web problems

【讨论】:

  • 谢谢,已经找到解决方案。我将它添加到我的问题中。感谢大家的快速回复。
  • @KevinGorjan_ 另一个是先转换成数组。实际上有很多方法可以到达罗马。
猜你喜欢
  • 2014-10-02
  • 1970-01-01
  • 2011-01-06
  • 1970-01-01
  • 1970-01-01
  • 2015-07-25
  • 2019-06-02
  • 2020-02-11
  • 1970-01-01
相关资源
最近更新 更多