PHP: Hypertext Preprocessor

PHP4は8月8日(米国時間)にサポート終了となった。以降、PHP4がアップグレードされることはない。セキュリティの観点からPHP4を採用している場合にはできるかぎり早いタイミングでPHP 5.2系へアップグレードする必要がある。しかし、とは言ってもPHP4からなかなか移行できないという場合も多い。PHP4から5への変更にともなう学習コストが懸念されるし、アプリケーションの更新も骨が折れる。

しかしアップデートしないわけにもいかない。Zend PHP 5 Certification BlogにDifferences Between PHP 4 and 5のタイトルのもとPHP4とPHP5の違いを簡単にまとめたものが公開されている。PHP5の学習を躊躇っている場合には概観を掴むためにもチェックしておきたい内容だ。簡単にまとめると次のような内容が紹介されている。

言語機能の違い

  • PHP5では関数やクラスメソッドに渡すパラメータを特定のクラスやそのサブクラス、または配列に限定することができる。ただしそれ以外のスカラ型は指定しない方がいい
  • PHP5では文字列や配列操作に関する多くの新しい関数がコアプラットフォームに追加されている

オブジェクトの違い

  • PHP5ではオブジェクトは参照渡しとなった。オブジェクトに関連付けられた変数はオブジェクトのコピーを作成するのではなく、オブジェクトへの参照が一つ増えることを意味する
  • PHP5ではオブジェクトをコピーする場合にはcloneコンストラクトと__clone()マジックメソッドを使う
  • PHP5ではコンストラクタとデストラクタには__construct()と__destruct()という名前を使う必要がある
  • PHP5ではインタフェースと抽象化クラスが導入されている
  • PHP5では定数、スタティックメソッド、プロパティをクラスのスコープ内で定義できる
  • PHP5ではクラスメソッドやプロパティにはpublic、private、protectedなどを指定できる
  • PHP5ではクラスやメソッドに継承を許可するかどうかを指定できる

マジックメソッドの違い

  • PHP5には新しいマジックメソッドがいくつか追加されている
  • 定義されていないオブジェクトプロパティにアクセスする場合は__get()および__set()がコールされる
  • isset()に定義されていないプロパティが渡される場合は__isset()がコールされる
  • unset()に定義されていないプロパティが渡される場合は__unset()がコールされる
  • オブジェクトが直接echoまたはprint()される場合には__toString()がコールされる

エクステンションの違い

  • PHP5ではSimpleXML、DOMXML、DOMXSL、Sablotron、PDO、hash、SPL、Reflectionなどのエクステンションが追加されたり、または新しい機能が追加されている

エラーハンドリングの違い

  • PHP5では例外処理のハンドリングがサポートされている

細かい違いや新しい機能の追加、古い機能から新しい機能への変更などほかにも注意すべき点はあるが、全体としてどういった変更が実施されたのかを把握するうえでは役に立つ内容だ。PHP4からアップグレードを躊躇っている場合には一度読んでおきたい内容だ。