引用名称中包含短划线的对象属性


Referencing an object property that has dashes in the name

我有一个xml文档,其中的标记中有两个短划线,类似于:<item--1>。我使用SimpleXML来解析此文档,因此它为我提供了带有标记名称的对象属性。这显然是个问题,我想是因为破折号对于变量和属性名称来说是无效字符。

<?php
$xml = "<data><fruits><item>apple</item><item--1>bananna</item--1></fruits></data>";
$xml = simplexml_load_string($xml);
foreach( $xml->children() as $child ) {
  var_dump($child->item);
#  var_dump($child->item--1);
}

当你运行这个时,你会得到

object(SimpleXMLElement)#5 (1) {
  [0]=>
  string(5) "apple"
}

但是,如果您取消注释最后一行,即带有两个短划线的xml元素,则会得到一个错误:

PHP Parse error:  syntax error, unexpected T_LNUMBER in test.php on line 17

我试着用大括号:

var_dump($child->{item--1});

但这只给了我一个错误:

PHP Parse error:  syntax error, unexpected T_DEC

其是递减运算符或--

如何引用此对象的属性?

您使用大括号的方法并没有太大错误,但需要在大括号之间加一个字符串:

var_dump($child->{'item--1'});

来自SimpleXMLElement对象的手册页面:

警告任何试图使用包含连字符的密钥名称解析XML的人(即)

<subscribe>
  <callback-url>example url</callback-url>
</subscribe>

为了访问回调url,您需要执行以下操作:

<?php
  $xml = simplexml_load_string($input);
  $callback = $xml->{"callback-url"};
?>

如果您尝试在不使用大括号和引号的情况下执行此操作,您会发现返回的是0,而不是您想要的。