【问题标题】:PHP DOM, method chainingPHP DOM,方法链
【发布时间】:2011-07-04 13:35:03
【问题描述】:

我有以下代码行,而第一个表示法做了它应该做的(将 XML 元素及其内容添加到 DOM),但如果我链接方法,则不是。

/**
 * @var string $key
 * @var DOMNode $value
 */
$newElem = $dom->createElement($key);
$newElem->appendChild($value);

以下示例将导致 E_WARNING: DOMNode::appendChild(): Couldn't fetch DOMNode。 (我花了大约一个小时才找到那个错误/错误。)

$newElem = $dom->createElement($key)->appendChild($value);

谁能解释为什么不同符号的相同代码会导致错误?

编辑:我有 uploaded a test-case,在使用 PHP 5.3.5 运行时会导致 E-WARNING 错误。

【问题讨论】:

  • 我无法重现您的错误。你能显示$key$value 中的内容吗?
  • 这里一样,按预期工作,现在显示错误;你使用的是哪个 PHP 版本?
  • 它在循环中执行,key总是一个字符串,命名新元素(例如'name')。值是DOMCharacterDataDOMText,取决于键(例如$dom->createTextNode('Test-Marker'))。我已经对该程序进行了多次测试,但没有更改上面粘贴的任何其他部分。我在 Ubuntu 11.04 上使用 PHP 5.3.5

标签: php method-chaining


【解决方案1】:

由于 PHP 的语法,这里不可能有区别。

$b = $a; $b->c();$a->c(); 相同。

您的代码还有其他问题。

【讨论】:

  • “这是不可能的”——至少它应该是:)
【解决方案2】:

这个怎么样?

$newElem = ($dom->createElement($key))->appendChild($value);

请记住,在这种情况下,$newElem 是添加的节点,而不是父元素。

【讨论】:

  • 额外的括号不应该改变功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 2016-02-05
  • 1970-01-01
相关资源
最近更新 更多