Каковы преимущества использования SPL ArrayObject, ArrayIterator, RecursiveArrayIterator вместо обычных массивов? - PullRequest
11 голосов
/ 01 ноября 2010

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

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

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

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

Спасибо

1 Ответ

8 голосов
/ 02 ноября 2010

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

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

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

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

...