В чем преимущества использования SPL ArrayObject, ArrayIterator, RecursiveArrayIterator вместо обычных массивов?

Я начал изучать PHP SPL из ArrayIterators, и я хотел бы знать, какие преимущества могут использовать SPL ArrayObject, ArrayIterator, RecursiveArrayIterator вместо обычных массивов?

a) Я слышал, что циклы, использующие итераторы SPL, уменьшат использование памяти (но почему?). Я действительно не знаю, верить в это или нет, потому что я не понимаю, как это может уменьшить использование памяти.

b) Говоря о RecursiveArrayIterator, мы можем сказать, что иногда он может сохранять некоторые строки кода (мы используем одну конструкцию foreach вместо 2+ (зависит от размера массива)).

Возможно, мои вопросы могут показаться очень легкими для кого-то, но слишком мало информации/документации о SPL.

Спасибо

Ответ 1

Основное преимущество вы смотрите на эффективный доступ к данным в основном в области удобочитаемости. Таким образом, вы можете использовать объект так же, как массив в foreach, чтобы было более тесное взаимодействие с PHP.

a) Способ сокращения использования памяти заключается в том, что вы не делаете копию массива, но если все сделано правильно в этом движке, тогда она должна быть новой ссылкой до тех пор, пока массив не будет изменен, а затем скопирован.

b) По существу

Хорошим примером этого может быть расширение SimpleXML. Объект PHP/XML, с которым вы взаимодействуете, также действует как массив, который делает его эффективным, потому что вы можете просто выбрать или получить доступ к одному из элементов в списке. Вам не нужно захватывать массив из объекта, а затем перебирать его и делать с ним что-то еще, если вам нужно имя тега или атрибут.