Attention aux références dans un tableau !
Il y a un comportement particulier dans la gestion des références sur des éléments de tableaux (Toutes versions de PHP) .
Voici un exemple:
Ce qui retourne évidemment :
Array ( [0] => 3 [1] => 7 ) Array ( [0] => 3 [1] => 11 )
Maintenant, j’ajoute une ligne qui ne semble pas perturber :
Voyez la ligne 3 ?
Le résultat devrait être le même qu’avant, non ? Et pourtant :
Array ( [0] => 3 [1] => 11 ) Array ( [0] => 3 [1] => 11 )
En fait, ce n’est pas un bug, mais un comportement lié à la gestion des références dans les tableaux. Quand on copie un tableau, on copie également les références qui ont été posées sur les clefs.
Euhhhh je veux bien que ce soit voulu, mais c’est incompréhensible, illogique et source de pleins d’erreurs … en quoi le fait de créer une réf sur un tableau affecte les copies ? et il se serait passé quoi si tu avais fait la copie avant de faire la référence ?
Tu sais pourquoi ils ont « voulu » faire ça ?
Pfff …
En effet, si tu fais la copie après, tu n’as pas le problème.
C’est un comportement (bug ?) connu, lié à l’optimisation de la copie. C’est même dans la doc : http://php.net/manual/en/language.references.whatdo.php
En fait, la copie d’un tableau se fait élément par élément. Du coup, le tableau « $b » se voit récupérer l’information sur laquelle le 2ième élément est une référence, et donc … il la copie avec.
Apparemment, HHVM n’a pas cette « anomalie ».
Vérifié aussi sur PHP 5.5.13… Effectivement hyper dangereux… C’est un bon exemple « d’optimisation » dangereuse je trouve, il ne faut peut-être pas tout sacrifier sur l’hôtel de la performance…
De toutes façons, les références, c’est mal ….