Ausdruckstypen

PHP/FI 2.0 benutzte die linke Seite von Ausdrücken, um herauszufinden, wie das Ergebnis aussehen soll. PHP 3.0 zieht beide Seiten in Betracht um den Ergebnistypen zu bestimmen. Dies kann bei 2.0 Scripts dazu führen, sich in 3.0 unerwartet zu verhalten.

Betrachten Sie dieses Beispiel:


$a[0]=5;
$a[1]=7;

$key = key($a);
while ("" != $key) {
    echo "$keyn";
    next($a);
}

In PHP/FI 2.0 würde dies beide Kennziffern von $a anzeigen. In PHP 3.0 würde gar nichts angezeigt werden. Der Grund ist, daß in PHP 2.0, aufgrund des "linken" Arguments des Strings, ein Vergleich des Strings gemacht wurde, "" ist in der Tat nicht das selbe wie "0", was dazu führt, das die Schleife durchläuft. 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.

Dies zu reparieren ist einfach. Ersetzen Sie das While-Statement mit:


while ((string)$key != "") {