既存の PHP 5 のコードのほとんどは変更なしで動作するはずですが、 以下の下位互換性のない変更点については注意しましょう。
getrusage() に互換性のない引数を渡した場合に、 PHP 5.2.1 以降では NULL を返すようになりました。
ZipArchive::setCommentName() は、PHP 5.2.1 以降は成功した場合に TRUE を返すようになりました。
ZipArchive::setCommentIndex() は、PHP 5.2.1 以降は成功した場合に TRUE を返すようになりました。
SplFileObject::getFilename() は、PHP 5.2.1 以降ではファイルへの相対パスではなくファイル名のみを返すようになりました。
Win32 における環境変数 PHPRC の優先順位が変わりました。
環境変数 PHPRC は、Windows レジストリに保存されているパスより優先されるようになりました。
CLI SAPI は、カレントディレクトリにある php.ini や php-cli.ini を見に行かないようになりました。
明示されていませんでしたが、PHP 5.1.x では CLI バイナリが現在の作業ディレクトリにある PHP 設定ファイルを参照するようになっていました。 これは、予期せぬ設定ファイルを読み込んでしまうという問題を起こす可能性がありました。 この機能は PHP 5.2.0 で削除されました。PHP は、カレントディレクトリの php.ini や php-cli.ini を参照しません。 マニュアルの コマンドライン の部分も参照ください。
ゼロで割った余りを求めようとすると警告が発生するようになりました。
以前のバージョンの PHP では、integer % 0 は何も警告を発せず、 予期せぬ結果である FALSE を返していました。 PHP 5.2.0 以降では、このような操作を使用とすると E_WARNING が発生するようになりました。これは、ゼロで除算を行った際の挙動と同じです。
__toString() が、適切な場面で常にコールされるようになりました。
マジックメソッド __toString() は、文字列コンテキストでコールされるようになりました。 つまり、オブジェクトを文字列として使用する際には常にコールされるということです。
オブジェクトを文字列として扱った場合に自動的にオブジェクト ID が返されるという機能は、PHP 5.2.0 で廃止されました。 オブジェクト ID は常に一意となるわけではないので、この機能には問題があったわけです。 この変更により、オブジェクト ID が返されることを前提としたアプリケーションは動作がおかしくなってしまいます。 オブジェクトの値を文字列として使用すると、(捕捉可能な) 致命的なエラーとなります。
<?php |
たとえ __toString() を実装したとしても、 オブジェクトを配列のインデックスやキーとして使用することはできません。 将来的には組み込みの機能でハッシュをサポートする予定ですが、 現時点の PHP 5.2.x の段階では、自分でハッシュ処理を実装するか SPL の関数 spl_object_hash() を使用してください。
__toString() メソッド内からは例外をスローすることはできません。
abstract static なクラス関数が削除されました。
ちょっとした手違いで、PHP 5.0.x および 5.1.x では abstract static な関数をクラス内で定義できてしまっていました。PHP 5.2.x では、 これはインターフェイス内でのみ定義できるようになりました。
RFC2397 (data: ストリーム) に対応しました。
'data' URL スキームに対応したことにより、 Windows 環境での挙動が変わる可能性があります。 NTFS ファイルシステムを使用しており、 アプリケーションでメタストリームを使用していた場合、 もし 'data:' という名前のファイルをパス情報なしでアクセスしようとすると正しく動作しません。 これを避けるには、アクセス時に 'file:' プロトコルを使用します。
RFC 2397 も参照ください。