Tipos de expresiones

PHP / FI 2.0 usó el lado izquierdo de las expresiones para determinar de qué tipo debía ser el resultado . PHP 3.0 toma ambos lados en cuenta cuando determina el tipo de resultado , y eso puede producir resultados impredecibles si ejecuta guiones 2.0 en 3.0 .

Considere este ejemplo :

 
$a[

 
0]=5

 
;

 
$a[1]=7

 
;

 
$key

 
=

 
key($a)

 
;

 
while

 
("

 
"

 
!=

 
$key

 
)

 
{

 
echo

 
"$keyn"

 
;

 
next($a)

 
;

 
}



En PHP/FI 2.0, esto mostraría los dos índices de $a. En PHP 3.0, no muestra nada. El motivo es que en PHP 2.0, al ser el argumento izquierdo de tipo cadena, se comparaba cadenas, y puesto que ciertamente "" no es igual a "0" , el bucle continúa. En PHP 3.0, cuando se compara una cadena con un entero, se realiza una comparación de enteros (la cadena es convertida a entero). Esto es comparar entonces atoi("") que es 0 , y variablelist que tambien es 0 , y como 0==0 , el bucle no avanzará.

La solución a esto es simple , reemplaze la declaración while con :

 
while

 
(

 
(string)$key

 
!=

 
""

 
)

 
{