Web aym.pekori.to

式の型

PHP/FI 2.0 では、結果の型を決めるのに左辺式を使っていました。 PHP 3.0 では、結果の型を決めるのに両辺を使うようになったので、 3.0 環境の元で 2.0 のスクリプトを実行すると、 予期しない結果になる場合があります。

以下の例を考えてみましょう。

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

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

PHP/FI 2.0 では、この例は $a の 2 つのインデックス双方を表示します。 一方、PHP 3.0 ではなにも表示されません。この理由は、PHP 2.0 では、 左側の引数が文字列なので文字列の比較が行われますが、もちろん """0" とは等しくならないためです。 一方 PHP 3.0 では、文字列が数字と比較されると、 (文字列が数字に変換され、) 数字による比較が行われます。 0atoi("") で比較され、 さらに変数リスト の方も 0 と評価され、0==0 なので、 その結果ループは 1 度も実行されないということになります。

これを解決するのは簡単です。 while ステートメントを以下のように変更します。

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