多くの既存の PHP 4 のコードは変更無しで動作するはずですが、 以下の下位互換性がない変更点について注意する必要があります。
E_WARNING
ではなく
E_ERROR
を発生します。不正な使用の例は、次のようなものです。
$str = 'abc'; unset($str[0]);
E_WARNING
が発生します。あなたのコードで
突然 E_WARNING
が発生し始める可能性が
あるため注意してください。
PATH_TRANSLATED
は、Apache2 SAPI では暗黙のうちに設定されません。
この動作は、Apache により設定されていない場合に SCRIPT_FILENAME
と同じ値に
設定する PHP 4 と異なります。
この変更は、» CGI/1.1 の規約に従うためのものです。
詳細については、
» bug #23610 を参照してください。
また、マニュアルの
$_SERVER['PATH_TRANSLATED'] についての記述も参照してください。
この問題は、PHP のバージョン >= 4.3.2 でも影響を及ぼします。
T_ML_CONSTANT
は、
Tokenizerエクステンションで
定義されなくなりました。error_reporting にE_ALL
を指定した場合、PHPは通知(notice)を生成します。
T_ML_CONSTANT
は、全く使用されていませんが、
PHP 4 では定義されていました。PHP 4とPHP 5の両方において、
// と /* */ は、共に T_COMMENT
定数と
解釈されます。
しかし、PHP5からPHPにより解釈されるようになった
PHPDoc形式のコメント /** */ は、T_DOC_COMMENT
と認識されます。
__CLASS__
,
__METHOD__
, および
__FUNCTION__
にも適用されます。
これらの値は、宣言時と同様に(ケース依存で)返されます。
FALSE
を返すようになりました。
例1 strrpos() と strripos() は、 needleとして文字列全体を使用する
<?php
var_dump(strrpos('ABCDEF','DEF')); //int(3)
var_dump(strrpos('ABCDEF','DAF')); //bool(false)
?>
例2 プロパティを持たないオブジェクトはもはや"空"とはみなされない
<?php
class test { }
$t = new test();
var_dump(empty($t)); // echo bool(false)
if ($t) {
// 実行される
}
?>
以下の例はPHP 4では有効でしたが、PHP 5では致命的なエラーを 発生します。
例3 クラスは使用前に宣言する必要がある
<?php
$test = new fubar();
$test->barfu();
class fubar {
function barfu() {
echo 'fubar';
}
}
?>