PHP 5の新機能
PHP 5で最も大きく変わったのはオブジェクトモデルだ。一から設計し直され、旧版に比べて、オブジェクト指向パラダイムに、より忠実なモデルが採用されている。旧版には、オブジェクトの扱い方に大きな欠点があった。PHPのオブジェクトの挙動は、JavaやC++など、他のオブジェクト指向言語から期待されるものと異なっていたのだ。一般のオブジェクト指向言語より単純なアプローチが採用されていたためだが、この違いは、真の――この業界でオブジェクト指向とされている意味における――オブジェクト指向でPHPを使いたい人にとっては埋めがたい溝となっていた。
従来採用されていたオブジェクトモデルの最大の技術的欠陥は、オブジェクトが参照ではなく、値で渡されるという点にある。熟練のオブジェクト指向開発者にとって、これはオブジェクト階層を作成したり操作したりする際に一連の落とし穴となる。また、そのいくつかを解決するには複雑な構文が必要だ。技術的には、これがPHPの巨大化する原因となっていた。呼び出すたびにオブジェクトのクローンを作って渡すからである。
PHP 5では、オブジェクトは参照渡しになっている(デフォルト)。これは他のオブジェクト指向言語とほぼ同様の振る舞いであり、オブジェクト指向言語を使っている人にとっては扱いやすい。ただし、旧版のPHPオブジェクトモデルに対するほぼ透過的な後方互換性も残されている。
こうした改訂の中心にあるのは、Zend Engineの第2バージョンである。PHP 5のオブジェクト参照に関する挙動は、オブジェクトの各インスタンスに割り当てられた特別なハンドルが支えている。以下に挙げるオブジェクト指向関連機能も、このコアPHPエンジンによるものである。
- インタフェースが改善され、クラスの実装と階層の作成に関する柔軟性が大幅に向上した。
- 保護クラスおよびプライベートクラスのメソッドとメンバが強化され、一般のオブジェクト指向言語と同様にクラスデータをカプセル化できるようになった。
- 静的な関数と変数が改善され、一般のオブジェクト指向言語と同様に、唯一のインスタンスを持つオブジェクトつまりシングルトンを容易に扱えるようになった。
- リフレクションで、同じクラス内のデータのイントロスペクションが可能になった。
- 例外:旧版にはクラスエラーの捕捉に関する機能がなかったが、PHP 5では、ランタイム例外を検出するためのcatchセクションを自然なオブジェクト指向構文で定義できるようになった。
オブジェクト指向言語に典型的に見られるこうした機能が強化されただけでなく、JavaやC++から期待される機能の多くも追加されている。しかし、2番目に大きな強化点と言えば、Javaまたは.Net――採用数で見れば、現在の市場における2大開発環境だろう――で書かれたコンポーネントの呼び出しで統合が強化され高速化された点だ。これらはすべて、エンジンを再設計した賜である。
広く利用されているもう一つの技術XMLへの対応も大きく変更された。旧版では、DOMやSAXの構文解析あるいはXSL変換のようなXMLの中核処理には各種ライブラリの寄せ集めが使われていたが、新版では、そのためのオープンソースライブラリlibxml2が採用された。その結果、SOAPサポートもPHP 5の組み込みC拡張として書き直され、旧版でSOAPアプリケーションを実行する際に広く使われていたPEARモジュール(PHPで書かれている)が大幅に強化された。
Webアプリケーションではデータベースはよく使われるコンポーネントだが、主要なリレーショナルデータベースとのインタフェースも改善された。PHP 5のディストリビューションには新しいMySQL拡張が付属しており、これにより、prepared statementやSSLやトランザクション制御など、MySQL 4.1以降で提供されている機能が利用できるようになった。組み込みSQLデータベースSQLiteもサポートされている。したがって、フル装備のデータベースではなく軽量版を使いながら、PHP 5の持つ最新のオブジェクト指向機能を利用することができる。
以上のほか、アプリケーションのコードの中からPerlスクリプトを実行したり、HTMLコードを構文解析するためのオープンソースライブラリTidy
を利用したりすることもできるようになった。さらに、新しいメモリ管理ではRAMの使用法も改善されている。Daniel Rubioは、エンタープライズソフトウェアの開発、研修、コンサルティングを専門としメキシコに本拠を置くOsmosis Latina社の上級コンサルタント。