PHP

[メモ]PHP 5.3から5.6までに追加された機能

More than 3 years have passed since last update.

本題の前に

背景

まもなくPHP7がリリースされているという話を見て、"現時点(2015年5月時点)で最新のPHPってどんな機能が追加されているのだろうか?"とふと思いPHPマニュアルの付録をさらっと見てみたところ、思いのほか知らない機能があることに気付きました。

自戒の意味も込めて、個人的に気になった"各バージョン毎の追加機能"を簡単にまとめて社内勉強会のLTで発表してみたら、思いのほかウケがよかったので、作ったスライドの内容を公開してみます。

前提

  • LTで発表する内容として作ったので、ピックアップして簡易的にまとめており詳細に触れてはいません。詳細を知りたい場合は、PHPマニュアルの付録を参照してください。
  • 関数の追加・変更や、バージョン毎の互換性等に関しては特に触れていません。
  • タイトルにもある通り、PHP5.3以降に絞って書いています。

本題

PHP 5.3

  • 無名関数の対応
  • 名前空間のサポート
  • クラスの外でconstを利用して定数を定義できる。
    • 元々、クラスの外での定数はdefineを使って定義できました。
      defineとの違いとしては、名前空間の影響を受けることが挙げられます。
  • 三項演算子の短縮形(?:)が利用可能
    • ex) $member = $djyugg ?: “other”;
    • 上記の場合、\$djyuggの値をbooleanにキャストして、trueの場合は\$djyuggの値を代入、falseの場合は"other"を代入といった動作になります。
  • goto文の対応

PHP 5.4

  • Traitのサポート
  • 配列の短縮形([])サポート
var members = [];
  • インスタンス生成時にメンバにアクセス可能になる
(new Hoge())->fuga()
  • 2進数フォーマットの対応
    • ex) 0b10011101
  • PHPモジュールにWebサーバが組み込まれる
    • あくまで開発支援用

PHP 5.5

  • foreachでlist()が利用可能
  • generatorの対応
  • try-catchでfinallyが利用可能
  • arrayリテラルとstringリテラルのデリファレンス
    • “string”[2] で”r”が出力される。
    • 1バイト単位でしか参照できないようで、マルチバイト文字で同じことをやると化けます…
  • OPcache 拡張モジュールの追加
    • ソースコードを事前に中間コードにコンパイルしてメモリにキャッシュしてくれる機能。
      php.iniで有効・無効を設定できます。

PHP 5.6

  • constでの定数定義時に式が利用可能
const CONST_VALUE = 1;  
const CONST_VALUE_SECOND = CONST_VALUE * 2
  • 可変個引数関数(...演算子)
public function input_check($user,  $parameters)
  • 累乗演算子 ** の追加
  • 名前空間の機能として、useを使った関数・定数のインポート・エイリアス定義が可能

参考