引用名称中包含破折号的对象属性

时间:2012-09-06 22:24:52

标签: php syntax properties simplexml

我有一个带有标记的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

是递减运算符,或--

如何引用此对象的属性?

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

来自SimpleXMLElement <subscribe> <callback-url>example url</callback-url> </subscribe> 对象:

  

警告任何尝试使用包含连字符的键名解析XML,例如。)

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

要访问callback-url,您需要执行以下操作:

{{1}}
  

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