PHP マニュアル
前のページ | 付録 B. PHP 4 から PHP 5への移行 | 次のページ

# 下位互換性のない変更点

多くの既存の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 var_dump(strrpos('ABCDEF','DEF')); //int(3) var_dump(strrpos('ABCDEF','DAF')); //bool(false) ?>`

例 B-2. プロパティを持たないオブジェクトはもはや"空"とはみなされない
`<?php class test { } $t = new test(); var_dump(empty($t)); // echo bool(false) if (!$t) { // 実行される } ?>`

以下の例はPHP 4では有効でしたが、PHP 5では致命的なエラーを 発生します。

例 B-3. クラスは使用前に宣言する必要がある
`<?php $test = new fubar(); $test->barfu(); class fubar { function barfu() { echo 'fubar'; } } ?>`

前のページ | ホーム | 次のページ
PHP 4 から PHP 5への移行 | 上に戻る | CLI と CGI