最近災害が発生し、PHP Web アプリケーションを PHP バージョン 5.2.6-1+lenny16 から PHP バージョン 5.3.3-7+squeeze15 に移行する必要があり、一見重要な違いが見つかりました。
私たちのアプリケーションでは、オブジェクト構文を使用して配列のインデックスを誤って呼び出した例がありました。
echo $array->index;
しかし、5.2.6 ではこれが許されているようで、$array['index'] が書き込まれたかのように正しく処理されます。
さらにテストした結果、5.2.6 が具体的に行っていることは、$array->index が empty(); であるかどうかに関して 5.3.3 と一致していません。
両方のサーバーで実行したテスト コードは次のとおりです。
<?php
echo phpversion() . '<br>';
$array = array(
'x' => 1,
'y' => 2
);
if (!empty($array->x))
{
echo "not empty";
}
else
{
echo "empty";
}
?>
2 つの異なる出力を次に示します。
5.2.6-1+lenny16
not empty
5.3.3-7+squeeze15
empty
当然のことながら、開発中にこれらのエラーが警告されなかったため、機能不全が発生するケースがいくつかあります。この不正な構文を許可するように php 5.3 を構成する方法はありますか?
設定の問題ではないと思いますよね?バージョン間で empty() の動作に何か変更がありましたか?