本題の前に
背景
まもなくPHP7がリリースされているという話を見て、"現時点(2015年5月時点)で最新のPHPってどんな機能が追加されているのだろうか?"とふと思いPHPマニュアルの付録をさらっと見てみたところ、思いのほか知らない機能があることに気付きました。
自戒の意味も込めて、個人的に気になった"各バージョン毎の追加機能"を簡単にまとめて社内勉強会のLTで発表してみたら、思いのほかウケがよかったので、作ったスライドの内容を公開してみます。
前提
- LTで発表する内容として作ったので、ピックアップして簡易的にまとめており詳細に触れてはいません。詳細を知りたい場合は、PHPマニュアルの付録を参照してください。
- 関数の追加・変更や、バージョン毎の互換性等に関しては特に触れていません。
- タイトルにもある通り、PHP5.3以降に絞って書いています。
本題
PHP 5.3
- 無名関数の対応
- 名前空間のサポート
- クラスの外でconstを利用して定数を定義できる。
- 元々、クラスの外での定数はdefineを使って定義できました。
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を使った関数・定数のインポート・エイリアス定義が可能