PHP 5.3は2009/6/30リリースされた最新のPHPです。PHPの基本的なバージョン付けのポリシーでは,マイナーバージョンで機能追加や細かい仕様変更が行われ,言語機能を拡張する場合にメジャーバージョンを更新することになっています。
しかし,PHP 5.3はマイナーバージョンアップですが機能追加や細かい機能変更が施されたバージョンではありません。言語機能が拡張されたメジャーバージョンアップと言ってよいような変更が行われたバージョンです。
PHP 5.3とPHP6
PHP 5.3にメジャーバージョンアップと言ってよいような変更が追加された理由はPHP6との互換性維持です。
PHP 6は正式にUnicodeがサポートされるようになります。Unicodeがサポートされる,ということは文字列型に文字列を保存すると文字列がUnicodeとして処理されることを意味します。つまり,日本語の1文字がstrlen関数で1文字として計算されるようになります。
- PHP 5.x: echo strlen('日本語'); // 9を出力
- PHP 6.x: echo strlen('日本語'); // 3を出力
マルチバイト文字列の計算が正しく行われるようになるのです。文字列型は文字列とバイナリの両方を保存できるコンテナのようなデータ型になります。アプリケーションは文字列とバイナリを必要に応じて区別しなければならないケースが発生します。文字列型の仕様変更は過去のアプリケーションの動作に大きく影響します。さらに,PHP6へはこれから解説する言語仕様の追加等や国際化をサポートするモジュールの追加が予定されていました。
PHP 5.3はPHP 6への緩やかな移行を可能にするために,PHP 6から文字列型のUnicodeサポートを取り除いたPHPと言えるバージョンとなっています。PHP5.3に対応したアプリケーションはUnicodeサポートにだけ注意すれば,比較的容易に移行できるようになります。
PHP 5.2とPHP 5.3
PHPはマイナーバージョンアップが行われると,古いマイナーバージョンのサポートが打ちきられていました。通常であればPHP 5.3のリリースに伴い,PHP 5.2のサポートは打ちきられるはずです。
しかし,PHP 5.3にはメジャーバージョンアップに匹敵する言語仕様の変更が行われいるので,特別にPHP 5.2へのサポートは継続されることになっています。PHP 5.2のサポート期間は明確にされていませんが,少なくともPHP 6がリリースされるまでは継続されると思われます。
PHP 5.2のサポートの終了は明確なリリースポリシーが決まっていないためはっきりしたことは言えません。しかし,少なくとも1年くらい前にはアナウンスされると考えられます。PHP 6のリリースはまだまだ先になるので,恐らく,最短でも2年はPHP 5.2のサポートは継続すると予想されます。
PHP 5.3かPHP 5.2か?
既にアプリケーションを開発し,運用しているのであれば無理にPHP 5.3にアップグレードする必要はありません。PHP 5.2のメンテナンスが終了する時期までにアップグレードすればよいでしょう。
これから新規にアプリケーションを開発する場合,恐らくPHP 5.3で開発することが望ましいでしょう。PHP 5.3はPHP 5.2よりもかなり長いサポート期間を期待できます。
しかし,良いことだけではありません。今のところ予定されていませんが,PHP 6がリリースされる頃にPHP 5.4がリリースされる可能性もあります。PHP 5.3はPHP 6からUnicodeサポートを除いたバージョンとして開発されてきましたが,既に違いが多くなっているからです(当初は2008年第1四半期のリリースを目標にしていた)。このため,今のことろ可能性はあまり高くありませんが,PHP 5.4がリリースされる可能性も残っています。
もしPHP 5.4がリリースされた場合,PHP 5.3系のサポートは打ちきられる可能性が高いです。このため,新規にアプリケーションを開発する場合,PHP 5.2,PHP 5.3のどちらを利用して開発するか迷うことになると思います。PHP 5.4がリリースされた場合,早急にPHP 5.3から5.4にバージョンアップしなければならないかも知れません。したがってバージョンアップ体制に問題がないならPHP 5.3を選択するとよいと思います。
PHP 5.3はPHP 5.2とかなり高い互換性を持っています。PHP 5.2用にアプリケーションを開発しても,PHP 5.3への移行を見据えて開発すれば,アプリケーションにはそれほど多くの変更は必要ないでしょう。
PHP 5.3とフレームワーク
PHP 5.3にはフレームワーク開発者に嬉しい機能が追加されています。PHP 5.3用のフレームワークは新しい機能を使って,より使いやすく実装される,と考えられます。
特にフレームワーク開発者に嬉しい機能は,次に紹介します。
PHP 5.3の目玉機能
PHP 5.3は目玉となる機能は次の言語拡張です。
- 名前空間のサポート
- レイトスタティックバインディング
- クロージャ
目玉機能呼ぶにはあまりふさわしくありませんが,制限付きgoto文もサポートされました。goto文が無いために,ループ処理が不必要に複雑になってしまうケースも在ります。goto文は悪い機能のように言われますが,正しく使えば良い機能です。
今回はこれら3つ(4つ)のうち,名前空間のサポートとレイトスタティックバインディングについて紹介します。
名前空間のサポート
名前空間とは,同じクラス名が定義されるなどでエラー(名前の衝突)が発生することを防ぐ機能です。
名前空間サポートにより追加された機能
- 名前空間を定義するnamespace文
- 名前空間のエイリアスを定義するuse文
- 名前空間名を保存した特殊定数__NAMESPACE__定数
ソフトウェアを開発する場合に,同じクラス名を付けたくなることがよくあります。たとえば,スケジュールを管理するクラスにScheduleと名前を付けると,フレームワークやほかのクラスライブラリのクラス名と衝突する可能性があります。
今まではクラス名や関数名にプレフィックスを付けて名前の衝突を回避してきました。名前空間機能を使用すると名前の衝突を自由に回避できます。

