【问题标题】:Difference between SimpleXMLElement PHP for and foreach loops?SimpleXMLElement PHP for 和 foreach 循环之间的区别?
【发布时间】:2015-11-18 04:32:27
【问题描述】:

我想知道在 PHP 5.6.11 中以下两种使用 SimpleXMLElement 进行迭代的方式之间是否有任何区别:

$simpleXMLIterator = new SimpleXMLIterator($xmlCode);

foreach ($simpleXMLIterator as $xmlElement) {

  echo $xmlElement->getName(), "\n";

}

$simpleXMLIterator = new SimpleXMLIterator($xmlCode);

for ($simpleXMLIterator->rewind(); $simpleXMLIterator->valid(); $simpleXMLIterator->next()) {

 echo $simpleXMLIterator->current()->getName(), "\n";

}

【问题讨论】:

    标签: php xml for-loop foreach iterator


    【解决方案1】:

    它将在对象内部调用相同的逻辑。 Iterator 是您可以在自己的对象中实现的接口。该接口指定诸如rewind()next()current()、...等方法

    如果您实现该接口,则该对象可以与foreach() 一起使用。 foreach() 识别接口并调用方法。

    SimpleXMLIterator 实现了该接口,更具体地说,它实现了RecursiveIterator,它使用两种方法(hasChildren()getChildren() 来处理递归结构)扩展了Iterator

    【讨论】:

    • 感谢您的回答:您已经解释了 foreach 位。但是您能否也解释一下为什么不能使 for 循环的行为与 foreach 循环相同?为什么两者不一样?谢谢。
    • 什么意思? “它将在对象内部调用相同的逻辑。”
    • 也许不同之处在于,使用 foreach 循环,您只能访问被遍历的 Traversable 对象封装的元素,而使用 for 循环,您将可以访问循环内的 Traversable 对象本身好吧。如果代码也需要在封闭的遍历对象上调用方法,则后者可能是有利的。谢谢。
    • 不,您可以使用 foreach() 中的迭代器方法。
    • $simpleXMLIteratorforeach() 中可用。为什么你会认为不是?
    猜你喜欢
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    • 2018-10-22
    • 2019-01-11
    • 1970-01-01
    相关资源
    最近更新 更多