2015-08-24 3 views
1

Я хотел бы знать, является ли в PHP 5.6.11 есть какая-то разница между следующими двумя способами с SimpleXMLElement итерации:Разница между SimpleXMLElement PHP для циклов foreach и foreach?

$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"; 

} 

ответ

1

Это будет вызывать ту же логику внутри объект. Iterator - это интерфейс, который вы можете реализовать в своих собственных объектах. Интерфейс определяет методы, как rewind(), next(), current(), ...

Если вы реализуете интерфейс объект может быть использован с foreach(). foreach() распознает интерфейс и вызывает методы.

SimpleXMLIterator реализует этот интерфейс, более конкретно он реализует RecursiveIterator который расширяет Iterator с двумя методами (hasChildren() и getChildren() обрабатывать рекурсивные структуры

+0

Спасибо за ваш ответ:.. Вы объяснили немного Еогеаспа Но не могли бы вы, пожалуйста, также объясните, почему цикл for не может привести к тому, что он будет вести себя так же, как цикл foreach? Почему не те две вещи одинаковые? Спасибо. –

+0

Что вы имеете в виду? «Это вызовет ту же логику внутри объекта». – ThW

+0

Возможно, разница в том, что с циклом foreach вы имеете доступ только к элементам, инкапсулированным проходящим объектом Traversable, тогда как с циклом for вы wil Я также имею доступ к самому объекту Traversable внутри цикла. Последнее может быть выгодным, если код должен также вызывать методы на охватывающем перемещаемом объекте. Благодарю. –

Смежные вопросы