Question

J'ai une classe et je veux pouvoir parcourir un certain membre du tableau. J'ai effectué une recherche rapide et trouvé IteratorAggregate :

class foo implements IteratorAggregate
{
    protected 

J'ai une classe et je veux pouvoir parcourir un certain membre du tableau. J'ai effectué une recherche rapide et trouvé IteratorAggregate :

    protected 

J'ai une classe et je veux pouvoir parcourir un certain membre du tableau. J'ai effectué une recherche rapide et trouvé IteratorAggregate :

class foo implements IteratorAggregate
{
    protected 

J'ai une classe et je veux pouvoir parcourir un certain membre du tableau. J'ai effectué une recherche rapide et trouvé IteratorAggregate :

<*>

qui fonctionne très bien, mais ne crée-t-il pas une nouvelle instance ArrayIterator chaque fois que foreach est utilisé dessus?

J'ai donc pensé que je devrais stocker l'instance d'itérateur dans un membre:

<*>

Le problème est que l'itérateur utilise une copie de $ this- > _array lors du premier appel de getIterator () , de sorte que les modifications apportées au membre ne sont pas réfléchi sur les constructions foreach suivantes.

Je pensais que je devrais sous-classer ArrayIterator , ajouter une méthode setArray ($ array) et l'appeler avant de le renvoyer dans getIterator () , mais je ne connais pas le nom de membre du tableau qu’il utilise en interne et s’il est écrasable par une sous-classe.

La question est la suivante: s’agit-il d’une optimisation prématurée et / ou inutile? Si non, quel est le meilleur moyen d'y parvenir?

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

qui fonctionne très bien, mais ne crée-t-il pas une nouvelle instance ArrayIterator chaque fois que foreach est utilisé dessus?

J'ai donc pensé que je devrais stocker l'instance d'itérateur dans un membre:

<*>

Le problème est que l'itérateur utilise une copie de $ this- > _array lors du premier appel de getIterator () , de sorte que les modifications apportées au membre ne sont pas réfléchi sur les constructions foreach suivantes.

Je pensais que je devrais sous-classer ArrayIterator , ajouter une méthode setArray ($ array) et l'appeler avant de le renvoyer dans getIterator () , mais je ne connais pas le nom de membre du tableau qu’il utilise en interne et s’il est écrasable par une sous-classe.

La question est la suivante: s’agit-il d’une optimisation prématurée et / ou inutile? Si non, quel est le meilleur moyen d'y parvenir?

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

qui fonctionne très bien, mais ne crée-t-il pas une nouvelle instance ArrayIterator chaque fois que foreach est utilisé dessus?

J'ai donc pensé que je devrais stocker l'instance d'itérateur dans un membre:

<*>

Le problème est que l'itérateur utilise une copie de $ this- > _array lors du premier appel de getIterator () , de sorte que les modifications apportées au membre ne sont pas réfléchi sur les constructions foreach suivantes.

Je pensais que je devrais sous-classer ArrayIterator , ajouter une méthode setArray ($ array) et l'appeler avant de le renvoyer dans getIterator () , mais je ne connais pas le nom de membre du tableau qu’il utilise en interne et s’il est écrasable par une sous-classe.

La question est la suivante: s’agit-il d’une optimisation prématurée et / ou inutile? Si non, quel est le meilleur moyen d'y parvenir?

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

qui fonctionne très bien, mais ne crée-t-il pas une nouvelle instance ArrayIterator chaque fois que foreach est utilisé dessus?

J'ai donc pensé que je devrais stocker l'instance d'itérateur dans un membre:

<*>

Le problème est que l'itérateur utilise une copie de $ this- > _array lors du premier appel de getIterator () , de sorte que les modifications apportées au membre ne sont pas réfléchi sur les constructions foreach suivantes.

Je pensais que je devrais sous-classer ArrayIterator , ajouter une méthode setArray ($ array) et l'appeler avant de le renvoyer dans getIterator () , mais je ne connais pas le nom de membre du tableau qu’il utilise en interne et s’il est écrasable par une sous-classe.

La question est la suivante: s’agit-il d’une optimisation prématurée et / ou inutile? Si non, quel est le meilleur moyen d'y parvenir?

Était-ce utile?

La solution

Votre second code échouera sur plusieurs boucles de l'objet où vous commencerez une nouvelle boucle avant qu'une autre ne soit terminée.

Cela ne ressemblait pas vraiment à une optimisation qui vaut la peine de passer du temps sur l'un ou l'autre.

Autres conseils

  

mais cela ne crée-t-il pas une nouvelle instance ArrayIterator chaque fois que foreach est utilisé dessus?

oui et?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top