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 :
PersistentCollection.php#536
Pull request #6110
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()));
Pull request #6110
Aucun commentaire:
Enregistrer un commentaire