PHP/FI 2.0 used the left side of expressions to determine what type
the result should be. PHP 3.0 takes both sides into account when
determining result types, and this may cause 2.0 scripts to behave
unexpectedly in 3.0.
Consider this example:
$a[0]=5; $a[1]=7;
$key = key($a); while ("" != $key) { echo "$keyn"; next($a); }
|
In PHP/FI 2.0, this would display both of $a's indices. In PHP
3.0, it wouldn't display anything. The reason is that in PHP 2.0,
because the left argument's type was string, a string comparison
was made, and indeed
"" does not equal
"0", and the loop went through. In PHP 3.0,
when a string is compared with an integer, an integer comparison is
made (the string is converted to an integer). This results in
comparing
atoi("") which is
0, and
variablelist which is
also
0, and since
0==0, the
loop doesn't go through even once.
The fix for this is simple. Replace the while statement with:
while ((string)$key != "") {
|