11.3 Migration de PHP/FI 2.0 à PHP 3.0
11 Appendices
Manuel PHP
. A propos des incompatibilités en 3.0 . old_function . Balises PHP . Syntaxe if..endif . Syntaxe while ->Types d'expression . Les messages d'erreur ont changé . Evaluation rapide des booléens . La valeur TRUE / FALSE comme retour de fonctions . Diverses incompatibilités
|
11.3.6 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:
<?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:
<?php while ((string)$key != "") { ?>
|
|