Manuel PHP
Précédent | Annexe D. Migration de PHP/FI 2.0 à `PHP` 3.0 | Suivant

# Types d'expression

PHP/FI 2.0 utilisait le membre à gauche dans les expressions, pour déterminer le type de résultat attendu. `PHP` 3.0 prend en compte les deux côtés de l'expression et cela peut produire des résultats inattendus avec les scripts 2.0.

Considérez les lignes suivantes :

Exemple D-9. Différence entre PHP/2 et PHP/3

`<?php $a[0]=5; $a[1]=7; $key = key($a); while ("" != $key) { echo "$keyn"; next($a); } ?>`

En PHP/FI 2.0, cet exemple va afficher les indices des $a. En `PHP` 3.0, l'exemple ne va rien afficher du tout. La raison est qu'en `PHP` 2.0, puisque l'argument de gauche est de type chaîne, une comparaison de chaîne était effectuée et, effectivement, `""` n'est pas `""`, ce qui conduit la boucle à continuer. En `PHP` 3, lorsqu'une chaîne est comparée avec un entier, la comparaison est de type chaîne (la chaîne est convertie en entier). Ce qui revient à faire la comparaison entre (`atoi("")`) qui vaut `0` et la variable qui vaut aussi 0 et comme 0==0, la boucle ne commence même pas.

La correction de ceci est simple. Il suffit de remplacer les commandes while par :

Exemple D-10. Nouvelle syntaxe PHP/3

`<?php while ((string)$key != "") { ?>`

Précédent | Sommaire | Suivant
Syntaxe while | Niveau supérieur | Les messages d'erreur ont changé