Domanda

Ho una classe e voglio poter iterare su un determinato membro dell'array. Ho fatto una ricerca veloce e ho trovato IteratorAggregate :

class foo implements IteratorAggregate
{
    protected 

Ho una classe e voglio poter iterare su un determinato membro dell'array. Ho fatto una ricerca veloce e ho trovato IteratorAggregate :

    protected 

Ho una classe e voglio poter iterare su un determinato membro dell'array. Ho fatto una ricerca veloce e ho trovato IteratorAggregate :

class foo implements IteratorAggregate
{
    protected 

Ho una classe e voglio poter iterare su un determinato membro dell'array. Ho fatto una ricerca veloce e ho trovato IteratorAggregate :

<*>

che funziona alla grande, ma che non crea una nuova istanza ArrayIterator ogni volta che foreach viene usato su di essa?

Quindi ho pensato di archiviare l'istanza iteratore in un membro:

<*>

Il problema è che l'iteratore utilizza una copia di $ this- > _array durante la prima chiamata di getIterator () , quindi le modifiche al membro non lo sono riflesso sui successivi costrutti foreach .

Stavo pensando di sottoclasse ArrayIterator , aggiungere un metodo setArray ($ array) e chiamarlo prima di restituirlo in getIterator () , ma non conosco il nome del membro dell'array che utilizza internamente e se sia sovrascrivibile da una sottoclasse.

La domanda è: si tratta di un'ottimizzazione prematura e / o non necessaria? In caso negativo, qual è il modo migliore per raggiungere questo obiettivo?

array = array('foo'=>'bar', 'baz'=>'quux'); public function getIterator() { return new ArrayIterator($this->_array); } }

che funziona alla grande, ma che non crea una nuova istanza ArrayIterator ogni volta che foreach viene usato su di essa?

Quindi ho pensato di archiviare l'istanza iteratore in un membro:

<*>

Il problema è che l'iteratore utilizza una copia di $ this- > _array durante la prima chiamata di getIterator () , quindi le modifiche al membro non lo sono riflesso sui successivi costrutti foreach .

Stavo pensando di sottoclasse ArrayIterator , aggiungere un metodo setArray ($ array) e chiamarlo prima di restituirlo in getIterator () , ma non conosco il nome del membro dell'array che utilizza internamente e se sia sovrascrivibile da una sottoclasse.

La domanda è: si tratta di un'ottimizzazione prematura e / o non necessaria? In caso negativo, qual è il modo migliore per raggiungere questo obiettivo?

iterator; public function getIterator() { if (!$this->_iterator instanceof ArrayIterator) { $this->_iterator = new ArrayIterator($this->_array); } return $this->_iterator; }

che funziona alla grande, ma che non crea una nuova istanza ArrayIterator ogni volta che foreach viene usato su di essa?

Quindi ho pensato di archiviare l'istanza iteratore in un membro:

<*>

Il problema è che l'iteratore utilizza una copia di $ this- > _array durante la prima chiamata di getIterator () , quindi le modifiche al membro non lo sono riflesso sui successivi costrutti foreach .

Stavo pensando di sottoclasse ArrayIterator , aggiungere un metodo setArray ($ array) e chiamarlo prima di restituirlo in getIterator () , ma non conosco il nome del membro dell'array che utilizza internamente e se sia sovrascrivibile da una sottoclasse.

La domanda è: si tratta di un'ottimizzazione prematura e / o non necessaria? In caso negativo, qual è il modo migliore per raggiungere questo obiettivo?

array = array('foo'=>'bar', 'baz'=>'quux'); public function getIterator() { return new ArrayIterator($this->_array); } }

che funziona alla grande, ma che non crea una nuova istanza ArrayIterator ogni volta che foreach viene usato su di essa?

Quindi ho pensato di archiviare l'istanza iteratore in un membro:

<*>

Il problema è che l'iteratore utilizza una copia di $ this- > _array durante la prima chiamata di getIterator () , quindi le modifiche al membro non lo sono riflesso sui successivi costrutti foreach .

Stavo pensando di sottoclasse ArrayIterator , aggiungere un metodo setArray ($ array) e chiamarlo prima di restituirlo in getIterator () , ma non conosco il nome del membro dell'array che utilizza internamente e se sia sovrascrivibile da una sottoclasse.

La domanda è: si tratta di un'ottimizzazione prematura e / o non necessaria? In caso negativo, qual è il modo migliore per raggiungere questo obiettivo?

È stato utile?

Soluzione

Il secondo codice fallirà su più loop dell'oggetto in cui si avvia un nuovo loop prima che ne sia terminato un altro.

Non sembrava davvero un'ottimizzazione su cui valga la pena spendere tempo.

Altri suggerimenti

  

ma ciò non crea una nuova istanza di ArrayIterator ogni volta che foreach viene usato su di essa?

sì e?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top