2010-11-01 10 views
11

Ho iniziato a imparare PHP SPL da ArrayIterators e mi piacerebbe sapere quali sono i vantaggi dell'utilizzo di SPL ArrayObject, ArrayIterator, RecursiveArrayIterator anziché di array regolari?Quali sono i vantaggi dell'utilizzo di SPL ArrayObject, ArrayIterator, RecursiveArrayIterator anziché di array regolari?

a) Ho sentito che i cicli che utilizzano gli iteratori SPL ridurranno l'utilizzo della memoria (ma perché?). Non so davvero di crederci o no perché non capisco come possa ridurre l'utilizzo della memoria.

b) Parlando di RecursiveArrayIterator possiamo dire che a volte può salvare alcune righe di codice (stiamo usando una costruzione foreach invece di 2+ (dipende dalla dimensione dell'array)).

Probabilmente, le mie domande potrebbero sembrare molto facili per qualcuno, ma ci sono troppe informazioni/documentazione su SPL.

Grazie

+0

La mia risposta è stata sufficiente? –

+0

Correlati: [SPL contro array: quando dovremmo usare SPL e quando dovremmo usare l'array in PHP?] (Http://stackoverflow.com/questions/3166405/php-spl-vs-array-when-should-we -use-spl-and-when-we-should-use-array-in-php5) (Lug 2010) – hakre

risposta

8

Il vantaggio principale che stai guardando accesso ai dati efficiente per lo più nella zona di leggibilità. In questo modo puoi usare l'oggetto proprio come un array in un foreach, quindi un'interazione più stretta con PHP.

a) Il modo in cui si riduce l'utilizzo della memoria è quello di non fare una copia della matrice, ma se fatto correttamente nel motore allora dovrebbe essere un nuovo riferimento fino a quando l'array viene modificato poi in realtà è copiato.

b) Essenzialmente

Un buon esempio di questo potrebbe essere l'ampliamento SimpleXML. L'oggetto PHP/XML con cui stai interagendo agisce anche come un array che lo rende efficiente da usare perché puoi semplicemente accedere o accedere a uno degli elementi all'interno dell'elenco. Non è necessario prendere una matrice dall'oggetto e quindi eseguire una iterazione e fare qualcos'altro con essa se si desidera il nome del tag o un attributo.

Problemi correlati