PHP, quando usare gli iteratori, come bufferizzare i risultati?

0
  1. Quando è meglio usare Iterators in PHP e come possono essere implementati per evitare di caricare simultaneamente tutti gli oggetti in memoria?
  2. Esistono costrutti in PHP in modo da poter mettere in coda i risultati di un'operazione da utilizzare con un Iterator, evitando di caricare contemporaneamente tutti gli oggetti in memoria?
    1. Un esempio potrebbe essere una richiesta HTTP di arricciatura contro un server REST
  3. Nel caso di una richiesta HTTP che restituisce tutti i risultati contemporaneamente (a la curl), sarebbe meglio andare con i risultati di streaming e, in caso affermativo, ci sono limitazioni o insidie di cui essere consapevoli?
    1. Se si utilizza lo streaming, è meglio sostituire curl con uno stream / socket nativo PHP?

La mia intenzione è quella di implementare Iterators per un client REST, e separatamente un ORM di documento che sto mantenendo, ma solo se posso farlo beneficiando di un uso ridotto della memoria, prestazioni più elevate, ecc. Grazie in anticipo per qualsiasi risposte: -)

    
posta Jon L. 21.03.2012 - 21:07
fonte

1 risposta

1

When is it best to use Iterators in PHP

Usa un iteratore ogni volta che vuoi accedere a una "raccolta" di dati (come un array) ma in modo orientato agli oggetti. È bello poter usare l'accesso agli oggetti, ma anche eseguire un "foreach" su quello stesso oggetto.

Do any constructs exist in PHP so that we can queue up results of an operation for use with an Iterator, while again avoiding loading all objects into memory simultaneously?

Niente di intrinseco; tuttavia, è sufficiente scrivere una specie di cercapersone. Non si carica l'oggetto di raccolta con 10.000 oggetti. Carichi come 20 o 50 o 100, poi salti in avanti quando hai esaurito il set corrente.

La cosa interessante dell'utilizzo di un oggetto qui è che tutto questo sta accadendo dietro le quinte. Voglio dire, devi programmarlo; tuttavia, una volta che funziona e diventi un consumatore di questo oggetto, non dovrai più preoccuparti degli interni. Basta usarlo. Basta aggiungere questo anche all'elenco dei vantaggi.

Un altro vantaggio è che ora puoi testare queste raccolte. Certo, potresti teoricamente provare un array; tuttavia, un array non può mostrare comportamenti come un oggetto può. Inoltre con un iteratore, ottieni comunque (la maggior parte) i vantaggi di un array semplice.

...is it better to replace curl with a PHP native stream/socket?

Se si utilizza qualcosa che è compatibile con lo streaming (come file_get_contents) e si utilizza il contesto dello stream, c'è poco che non si possa fare. Infatti, poiché non tutti hanno CURL, questa potrebbe essere l'opzione più portabile.

    
risposta data 21.03.2012 - 21:25
fonte

Leggi altre domande sui tag