多くの既存のPHP 4のコードは変更無しで動作するはずですが、 以下の下位互換性がない変更点について注意する必要があります。
strrpos() と strripos() は、 needleとして文字列全体を使用するようになりました。
文字列オフセットの不正な使用は、E_WARNINGではなく、 E_ERROR を発生します。
array_merge() は、配列のみを指定できるよう 変更されました。配列以外の変数を指定した場合は、各パラメータ毎に E_WARNING が発生します。あなたのコードで 突然 E_WARNING が発生し始める可能性が あるため注意して下さい。
サーバー変数PATH_TRANSLATEDは、Apache2 SAPIでは暗黙のうちに設定されません。 この動作は、Apacheにより設定されていない場合にSCRIPT_FILENAMEと同じ値に 設定するPHP 4と異なります。 この変更は、CGIの規約に従う ためのものです。詳細については、 bug #23610 を参照して下さい。
定数 T_ML_CONSTANT は、 Tokenizer 拡張モジュールで 定義されなくなりました。error_reportingにE_ALL を指定した場合、PHPは通知(notice)を生成します。 /* */ については、T_ML_CONSTANT の代わりに T_COMMENT 定数が使用され、これにより、 // と /* */ が共に T_COMMENT 定数で解釈される ことになります。しかし、PHP5からPHPにより解釈されるようになった PHPDoc形式のコメント /** */ は、T_DOC_COMMENT と認識されます。
variables_order に "S"が含まれる場合に、$_SERVER が argcおよびargv と共に設定されます。 $_SERVERを作成しないような特別な設定を行った場合、当然、argcおよびargv は 設定されません。 この変更は、CLI版において variables_orderの 設定によらず常にargcおよびargvを作成するために行われました。 これにより、CLI版では、常にグローバル変数 $argc および $argv が設定されるようになりました。
プロパティを持たないオブジェクトはもはや"空"とはみなされません。
クラスは、使用前に宣言する必要があります。
例 B-1. strrpos() と strripos() は、 needleとして文字列全体を使用する
|
以下の例はPHP 4では有効でしたが、PHP 5では致命的なエラーを 発生します。