対象読者
- PHPについて基本的な概念を理解している方
- WEBアプリケーションを開発している方
必要な環境
この記事では、PHP 7(RC5)を使ってLinux(Ubuntu14.04)とMac(10.11)で確認を行っています。インストール手順などは各環境によって違いがある部分もありますが、今回紹介する仕様に関しては環境による違いはありません。
PHP 7で何が変わったのか
PHP 5の次のバージョンアップがPHP 6を通り越してPHP 7になることになりました。元々、PHP 6で予定されていたような内容がPHP 5のマイナーバージョンアップによって取り込まれてしまったこともあり、次のPHPのバージョンアップがPHP 7になってしまったようです。そして、PHP 6で予定されていた大きな変更が取り込まれたのはPHP 5.3であり、そのリリースが2009年ですので、しばらく大きなリリースがされてなかったと言えると思います。
その間にもPHPは大規模なシステムでも使われつつあり速度面での改善を望まれていましたが、それらに答える形でパフォーマンスの向上を行いリリースされる事になります。Zend社のサイトのパフォーマンス比較によれば、約2倍程度のパフォーマンス向上が得られるとのレポートも上がっています。
しかし、パフォーマンス面以外の言語仕様面の細かい部分においてもこれまで通り改善は進んでいます。今回は、PHPマニュアル(新機能)を参考に、新しい機能、仕様を中心に紹介します。ただし、PHP 5.3からPHP 5.6までの変更も関係がある部分については一部、それらの説明も行っています。
引数、戻り値の型宣言
PHPという言語の良いところであり、悪いところでもある側面として、型の扱いが曖昧であることがありました。PHP 7では、型が厳格に扱えるように言語仕様が変更されました。ただし、これまで通りのように曖昧に扱うこともできますので、例えば共通となるライブラリやフレームワークなどでは、厳密な型として利用を制限しつつ、実際のWebサイトの各ページ処理ではこれまで通りにすることもできますので、必要性に応じて選択ができます。
引数の型宣言
PHP 5では引数の指定の際、クラスやインターフェースで型を指定することができ、このことはタイプヒンティングと呼ばれていました。しかしながら、基本的な型であるint型やstring型を指定することはできませんでした。PHP 7によってこれら基本的な型(表1 使用できるスカラー型一覧)がチェックできるようになりました。
宣言型 | 説明 |
---|---|
array | 配列(連想配列も含む) |
callable | コールバック関数 |
bool | 論理値(boolean) |
float | 浮動小数点数(float) |
int | 整数(integer) |
string | 文字列(string) |
実際にint型の型チェックをするようにしたコードの例がリスト1です。
function arg_int(int $num){ return $num; } var_dump(arg_int(1)); //(1)int(1)と出力される var_dump(arg_int("10")); //(2)int(10)と表示される var_dump(arg_int("a")); //(3)エラーが表示される
(1)では、ご想像通り整数の"1"として機能します。続いて(2)のように文字列の"10"ですが、こちらは整数の"10"として処理が行われます。このように型変換をして問題がないと思われる場合には、自動的に型変換が行われて処理が行われます。そして、(3)では文字列の"a"の場合ですが、こちらはエラーになります。
ただし自動的な型変換をされては困るという場合もあるのではないでしょうか。その場合には、ファイルの先頭にリスト2のように宣言することで、自動的な型変換を用いずに型チェックを行うこともできます。
ただし、この指定は関数を呼び出す型で行う必要があるので、あくまでも利用者側の意図が優先されるということのようです。また、string型の場合には自動的な型変換を行う(弱い型)ケースが多くなりますので、あくまで参考程度にするか、自動的な型チェックを無効(強い型)にする宣言を必ず行うような注意が必要になります。
declare(strict_types=1);