PHP各バージョンの新機能

2013年6月20日にPHP 5.5.0がリリースされました。そういえば、バージョン4.3以降の新機能や仕様変更を、 なんとなくしか理解できていなかったので、まとめてみました。
このページでは、「とりあえず流すだけ」で、細かい使用例などは追々別ページで試していきたいと思います。

PHP 5.4から5.5への移行 (公式サイトはこちら)

◆新機能

  • ジェネレータつまり順番に複数の値を返す関数を定義できます。新登場のyieldキーワードを使います。
  • try-catch文にfinally句が追加可能。
  • foreash文の中で「foreach ($array as list($a, $b))」のようにしてリスト内要素まで変数に格納可。
  • empty()が変数だけでなく任意の式を渡せるように改良。
  • 「'PHP'[0]」のように配列や文字列リテラルのデリファレンスが可能に。でも何に使うのか?要研究!
  • ClassName::classでクラスの完全修飾名を取得可能。
  • crypt()を拡張したパスワードハッシュ関数が整備。
◆その他の仕様変更
  • Windows版はXP,2003のサポート終了。
  • mysql関数は非推奨。mysqliか、PDO::MySQLを使うように。

PHP 5.3から5.4への移行 (公式サイトはこちら)

◆新機能

  • 単一継承を維持しながら横方向の再利用も行えるtraitのサポート
  • 配列の短縮構文。「$a = [1, 2, 3, 4];」
  • a_func($a)[0] のように配列を返す関数をそのまま参照できるように
  • クロージャで$thisが使えるように
  • <?= はshort_open_tagの設定に関係なく常に使えるようになった。設定の混乱から解放され嬉しい変更。
  • build-in Serverつまり開発用に使える独自のWebサーバーを同梱。開発が効率的になりました。
◆その他の仕様変更
  • 悪名高かった非推奨機能 「マジッククォート」「register_globals」「関数呼び出し側での参照渡し(&)指定」 が完全削除
  • sqlite拡張モジュールが削除され、sqlite3とPDO_SQLiteのみに
  • error_reportingでE_ALLを設定するとE_STRICTが含まれるように変更

PHP 5.2から5.3への移行 (公式サイトはこちら)

◆新機能

  • 名前空間のサポート。
  • クロージャのサポート。
  • 動的遅延束縛という機能のサポート。
  • goto文の追加
  • Nowdoc構文。これはヒアドキュメントに似ていますが合言葉の開始側をシングルクォートで囲む (注:終了側は囲まない)ことで中の変数解釈を行わないもの。
  • Nowdocに伴い、従来のヒアドキュメントの合言葉の開始側はダブルクォートで囲むことも可能に
  • 三項演算子の短縮形として「?:」が追加
  • 例外のネストが可能
  • Windows版で従来のphp_oci8.dllがなくなり、Oracle Client バージョン10用の php_oci.dllとバージョン11用のphp_oci8_11g.dllが追加。
  • SQLite3拡張モジュールの追加。
◆その他の仕様変更
  • constはdefine()と同じように、クラスの外でも使えるようになった。
  • php.iniの設定のうち、 従来からあまり推奨されなかった設定をすると本当にE_DEPRECATED警告が出るように変更。 具体的には register_globals、magic_quotes_qpc など。
  • 同じく非推奨の関数を使うと本当に警告が出るように変更。 具体的には、dl、ereg・eregiで始まる関数、session_register、splitなど。
  • 関数を呼び出す側で&をつけると警告が出る。&をつけるのは関数定義側だけでよい。

PHP 5.1から5.2への移行 (公式サイトはこちら)

◆新機能

  • JSON、Zip拡張モジュールの追加
◆その他の仕様変更
  • php.iniファイルを探す場所 のCLIの場合のルールが変更された。カレントディレクトリはphp.iniがあっても見に行かないように変更
  • WindowsバイナリのOracleモジュールを使うにはOracle Client10以降が必須に

PHP 5.0から5.1への移行 (公式サイトはこちら)

◆新機能

  • PDOが本体機能に合併
  • mysqlとmysqliサポートバージョンの改善
◆その他の仕様変更
  • ext/oracleなど古い拡張モジュールの削除(oci8、またはPDO_OCI8へ要移行)
  • 日付/時刻の処理が書き換えられ、php.iniで 「date.timezone = Asia/Tokyo」のように明示的に書かないとdate()関数などで警告が発生するようになった
  • 同梱のSQLite2⇒SQLite3移行

PHP 4.3から5.0への移行 (公式サイトはこちら)

◆新機能

  • RDBMSのSQLiteを同梱
  • MySQLの新しいモジュールmysqliを同梱
  • PDOがPECL拡張モジュールとして公開
◆その他の仕様変更
  • Windows版のApacheモジュールDLLファイル名の変更(php5apache2.dll)
  • エラー報告レベルにE_STRICTが追加

Open Source Web Architecture Top

(first uploaded 2013/06/23 last updated 2013/06/23, URANO398)