lundi 31 octobre 2016

Correction de PersistentCollection::clear()

Jusqu'à la version 2.5.5, PersistentCollection::clear() ne reset pas les clefs de $this->collection, si la collection est vide.

Ce qui veut dire que si on a eu des éléments dans $this->collection à un moment, puis qu'ils ont été supprimés "un à un" sans passer par clear(), la prochaine clef ne sera pas 0 mais l'index courant du tableau + 1 (2 si on avait 2 éléments par exemple).

Ce comportement pourrait être justifié, mais comme les clefs sont reset uniquement si on a des éléments à supprimer, le comportement dans les 2 cas n'est pas le même :
  • si on n'a pas d'éléments à supprimer, les clefs ne sont pas reset
  • si on a des éléments à supprimer, les clefs sont reset
$bar = new Entity(); $bar2 = new Entity(); $foo = new PersistentCollection(); $foo->add($bar); $foo->add($bar2); // les clefs seront reset, le prochain appel à add() aura l'index 0 $foo->clear(); $foo->add($bar); // [0] var_dump(array_keys($foo->toArray())); $foo = new PersistentCollection(); $foo->add($bar); $foo->add($bar2); $foo->removeElement($bar); $foo->removeElement($bar2); // les clefs ne seront pas reset, le prochain appel à add aura l'index suivant $foo->clear(); // [2] var_dump(array_keys($foo->toArray()));

PersistentCollection.php#536
Pull request #6110

Aucun commentaire:

Publier un commentaire