【问题标题】:Referencing an object property that has dashes in the name引用名称中包含破折号的对象属性
【发布时间】:2012-08-31 19:38:29
【问题描述】:

我有一个 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) 产生了什么?
  • object(SimpleXMLElement)#4 (2) { ["item"]=&gt; string(5) "apple" ["item--1"]=&gt; string(7) "bananna" } 虽然没有中断,但实际上并不允许我访问数据。它们不是我可以引用的数组元素。

标签: php syntax properties simplexml


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    来自SimpleXMLElement对象上的manual's page

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-03
      • 2021-09-15
      • 2018-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-25
      相关资源
      最近更新 更多