Services webmasters
Partenaires
Jeux concours gratuits
 
Syntaxe while
<<<
Types d'expression Les messages d'erreur ont changé
>>>

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 != "") {
?>

<< Types d'expression >>
Syntaxe while Migration de PHP/FI 2.0 à PHP 3.0 Les messages d'erreur ont changé
Services webmasters
Les manuels
 
CoursPHP.com - Reproduction interdite -