Migration PHP4 - PHP5

d&g
Petit nouveau ! | 2 Messages

24 nov. 2011, 10:45

Bonjour,

Je migre une application PHP4 en PHP5 et je suis tombé sur une anomalie que je ne comprend pas,
et mes recherches sur le net ne m'ont pas apporté plus de réponse...

Le bout de code en question est celui-ci (le code n'est pas de moi) :

while(list($k,$v)=each(($_REQUEST))) {
...
}

Cela provoqué une boucle infinie en bouclant sur le premier item du tableau "$_REQUEST", mais lorsque j'enlève les parenthèses inutiles autour du "$_REQUEST" pour donner ceci :

while(list($k,$v)=each($_REQUEST)) {
...
}

Dans ce cas tout se passe bien.
Quelqu'un peut m'expliquer d'où cela vient ?
Merci.

ViPHP
ViPHP | 2577 Messages

24 nov. 2011, 11:41

Bonjour,

Dans la doc il y a :
Assigner un tableau à une autre variable remet le pointeur du tableau original à zéro. À cause de ce comportement, nous aurions pu provoquer une boucle infinie dans notre exemple si nous avions assigné $fruit à une autre variable dans notre boucle.
Ce la semble dire que lors de l'interprétation ($toto) correspond à une réaffectation de $toto, comme si php lancait un calcul pour obtenir ($toto) alors qu'il prend $toto directement.

d&g
Petit nouveau ! | 2 Messages

24 nov. 2011, 11:48

Merci de l'information.
Ce qui me semble bizarre c'est qu'en utilisant un array "classique" l'anomalie n'est pas reproduite :

Par exemple :

Code : Tout sélectionner

$fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry'); while (list($key, $val) = each(($fruit))) { echo "$key => $val\n"; }
fonctionne très bien.

Cela viendrait donc de l'association du "each" avec "(($_REQUEST))" ?!?