Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

新しい仕様でより進化したPHP 7を体験してみよう

PHP 7がやってきた!! 第1回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2015/12/01 14:00

 PHPの新しいバージョンであるPHP 7がまもなく正式リリースされる予定です。そこで、2回に分けてPHP 7で新しく追加された仕様や機能、そして注意すべき点を紹介します。ただ、読者の皆様の中にはPHP 5.3からPHP 5.6でのリリースですらついて行けていないという方もいると思います。実際、PHP 5は数字こそマイナーバージョンにもかかわらず、かなり大きな言語仕様に変更があったと思いますので、これらの復習もかねてPHP 7の機能について紹介します。

目次

対象読者

  • 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 使用できるスカラー型一覧)がチェックできるようになりました。

表1 使用できるスカラー型一覧
宣言型 説明
array 配列(連想配列も含む)
callable コールバック関数
bool 論理値(boolean)
float 浮動小数点数(float)
int 整数(integer)
string 文字列(string)

 実際にint型の型チェックをするようにしたコードの例がリスト1です。

リスト1 スカラー型による引数チェックの例(scalar.phpの抜粋)
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型の場合には自動的な型変換を行う(弱い型)ケースが多くなりますので、あくまで参考程度にするか、自動的な型チェックを無効(強い型)にする宣言を必ず行うような注意が必要になります。

リスト2 自動的な型チェックを無効にする方法
declare(strict_types=1);

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • WINGSプロジェクト 小林 昌弘(コバヤシ マサヒロ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2017年5月時点での登録メンバは52名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂き...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

バックナンバー

連載:PHP 7がやってきた!!
All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5