PHP 7.1.0 正式版をインストールして新機能を試してみる
PHP 7.1.0 正式版がリリースされました。
http://php.net/releases/7_1_0.php
さっそくソースファイルからインストールして新機能を試してみます。なお、ここではWebサーバなどは使わず、単純にコマンドラインで実行を確認します。OS は VirtualBox 上の Ubuntu Server 16.04.1 LTS を使用し、必要なソフトウェアは、都度 apt
でインストールしています。(例えば sudo apt install clang libxml2-dev make
)
まず、PHP 7.1.0 のソースファイルを取得します。
$ wget -O php-7.1.0.tar.gz http://jp2.php.net/get/php-7.1.0.tar.gz/from/this/mirror
ダウンロードしたファイルを展開し、展開したディレクトリに移動します。
$ tar zxf php-7.1.0.tar.gz $ cd php-7.1.0
ソースファイルからビルドします。今回は試すだけなので ./configure
のオプションには特に何も指定していません。
$ ./configure $ make $ make test $ sudo make install
インストールに成功すると php
コマンドが利用できるようになります。
$ php -v PHP 7.1.0 (cli) (built: Dec 2 2016 14:02:04) ( NTS ) Copyright (c) 1997-2016 The PHP Group Zend Engine v3.1.0-dev, Copyright (c) 1998-2016 Zend Technologies
では、PHP 7.1.0 の新機能を試してみます。
nullable な型
関数の型宣言(PHP5ではタイプヒンティングとも呼ばれていました)で null を許容する仕組みが追加されました。nullable な型を使うためには型名の前に ?
を付けます。
<?php declare(strict_types=1); // 確認のため厳密な型チェックを有効にする // $flgはbool型かnull // 戻り値はstring型かnull function foo(?bool $flg): ?string { if (is_null($flg)) { return null; } return $flg ? 'Yes' : 'No'; } echo foo(true); // 文字列 'Yes' を返す echo foo(false); // 文字列 'No' を返す echo foo(null); // nullを返す echo foo(); // エラー(Fatal error: Uncaught ArgumentCountError) echo foo(1); // エラー(Fatal error: Uncaught TypeError)
void 関数
値を返さない関数の戻り値の型にvoid
を指定できるようになりました。
<?php function foo(): void { echo 'Hello, world.'; }
[ ]構文による配列の分割代入
配列の各要素を変数に代入する際に、[]
を使ってlist()
よりも簡単に書けるようになりました。
<?php $array = [1, 2, 3]; list($a, $b, $c) = $array; // PHP7.0ではlist()で分割代入できる [$a, $b, $c] = $array; // PHP7.1では[]構文で分割代入できる
クラス内定数がアクセス権をサポート
クラス内の定数にアクセス権を指定できるようになりました。
<?php class Foo { const BAR1 = 1; // 指定しない場合はpublic private const BAR2 = 2; protected const BAR3 = 3; public const BAR4 = 4; } echo Foo::BAR1; // 1を表示 echo Foo::BAR2; // エラー(Fatal error: Uncaught Error) echo Foo::BAR3; // エラー(Fatal error: Uncaught Error) echo Foo::BAR4; // 4を表示
iterable 擬似型
関数の型宣言で配列かTraversable
インターフェイスを実装したオブジェクトを示すiterable
を指定できるようになりました。
<?php function foo(iterable $ite): void { foreach ($ite as $value) { echo $value; } } foo([1, 2, 3]); // 123を表示 foo('Hello'); // エラー(Fatal error: Uncaught TypeError)
複数の例外を1つのcatch構文で捕捉
複数の異なる型の例外を、1つのcatch
構文で捕捉できるようになりました。
<?php try { } catch (ExceptionType1 | ExceptionType2 $e) { // 2つの例外 ExceptionType1 と ExceptionType2 を捕捉します } catch (\Exception $e) { }
list() におけるキーのサポート
配列をlist()
を使って分割代入する際に、キーで指定できるようになりました。
<?php $array = ['db_name' => 'test', 'db_user' => 'root', 'db_password' => 'secret']; // 順番を気にすることなく、キーに紐づく変数に代入できる list( 'db_user' => $user, 'db_password' => $password, 'db_name' => $database ) = $array;
前述の[]
による分割代入を利用するとより簡潔に書くことができます。
<?php $array = ['db_name' => 'test', 'db_user' => 'root', 'db_password' => 'secret']; // list()の代わりに[]を利用して分割代入 [ 'db_user' => $user, 'db_password' => $password, 'db_name' => $database ] = $array;
文字列のオフセットに負数をサポート
文字列の各文字に[]
や{}
を使ってアクセスする際に、負数を使えるようになりました。
<?php $string = 'Hello, world.'; $string[-1] = '!'; // 後ろから1文字目を '!' に上書き echo $string; // 'Hello, world!' を表示
- 作者: 小川雄大,柄沢聡太郎,橋口誠
- 出版社/メーカー: 技術評論社
- 発売日: 2010/11/12
- メディア: 大型本
- 購入: 32人 クリック: 1,065回
- この商品を含むブログ (59件) を見る