2010-11-01 1 views
11

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

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

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

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

Спасибо

+0

Был ли мой ответ достаточным? –

+0

Связано: [SPL против массива: когда мы должны использовать SPL и когда мы должны использовать Array в PHP?] (Http://stackoverflow.com/questions/3166405/php-spl-vs-array-when-should-we -use-spl-and-when-we-should-use-array-in-php5) (июль 2010 г.) – hakre

ответ

8

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

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

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

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