PHPのバージョン5.3から5.6までの新機能をおさらいする

レガシーなPHPコードを触っていると「あれ、このバージョンだとこの機能はまだ使えないのか?」みたいなことがたまにある。私がそれなりにPHPを使うようになったときの最新バージョンが5.6くらいで、それより前の機能はいつ追加されたものなのか曖昧にしか覚えていないからだ。

そこで今回はPHP5系の各バージョンでどんな機能が追加されていたのかをおさらいしてみようと思う。PHPのバージョンについては、世の中でそれなりに動いているバージョン5.3から5.61に焦点をあてる。また、今回は、全ての機能は紹介せず、大きな機能や個人的に気になった機能のみ簡単に書いていく。

基本的にこれから書く内容はPHPマニュアルにも載っている2ことなので、詳しく知りたい人はそちらを見ると良いだろう。

PHP 5.3

  • 名前空間
  • 遅延静的束縛
  • ラムダ、無名関数(クロージャ
    • クロージャで親スコープの変数を使用する場合、useで渡す
  • マジックメソッドを2つ追加
    • __callStatic():アクセス不能メソッドを静的コンテキストで実行したとき
    • __invoke()スクリプトがオブジェクトを関数としてコールしたとき
  • 定数をクラスの外でもconstを使って宣言できるようになる
  • 三項演算子の短縮記法?:
  • 静的なメソッドに動的にアクセスできるようになる

PHP 5.4

  • トレイト
  • 配列の短縮構文[]
  • 関数の戻り値を配列として使用できるようになる
    • func()[0];
  • クロージャ$thisをサポート
  • クラスのインスタンスを生成するときにそのメンバーにアクセスできるようになる
    • (new Cat())->nyaaaa();
  • Class::{expr}()構文をサポート
  • ビルドインウェブサーバ

PHP 5.5

  • ジェネレータ
  • 例外処理でfinallyキーワードが使用できるようになる
  • foreachlist()に対応
  • empty()に任意の式を渡せるようになる
    • それまでは変数しか渡せなかった
  • arrayリテラルとstringリテラルデリファレンス
    • echo [1, 2, 3][0]; // 1
    • echo 'sushi'[0]; // s

PHP 5.6

  • 定数式
    • 配列も定義できるようになる
      • const ARR = [1, 2, 3];
  • ...による可変個引数関数
    • function func(...$params) {}
  • ...による引数のアンパック
  • 累乗演算子**
    • echo 3 ** 2; // 9
  • use functionuse const
  • マジックメソッド
    • __debugInfo()var_dump()で出力するときの情報を変更できる

所感

マニュアルを流し読みしてざっと書いてみただけだが、結構学びがあった。よく知らなかった機能もあったので、それについては今度別で記事を書くかもしれない。PHPマニュアルをもっと読もうなという気持ちである。