福岡拠点の永嵜です。
現時点(2019/2/25)でのPHPの最新バージョンは7.3です。
PHP7.0リリースの際にパフォーマンスの向上や多くの新機能が追加されていますが、私自身があまり新機能を使えていなかったので新機能について調べました。
このブログでPHP7.0以降に追加された機能をいくつか紹介したいと思います。
1.引数/戻り値の型宣言
関数の引数/戻り値に明示的に型を指定することができるようになりました。
型を指定することで不正な値が渡されるのが防げます。
通常、Nullは許容されませんが型の前にクエスチョンマークをつけるとNullを許容でき指定した型だけでなく Nullも引数/戻り値として使用できるようになります。
サンプルプログラム
引き数 $a、$b、戻り値にint型指定を指定しています。
1 2 3 4 5 6 7 8 |
function getAddValue(?int $a,?int $b):?int{ return $a + $b; } $sum = getAddValue('A',1); print "合計値は{$sum}です。\n"; |
実行結果
宣言した型以外(キャスト出来る場合OK)が引数で指定されるとTypeErrorの例外がスローされます。
1 2 |
PHP Fatal error: Uncaught TypeError: Argu Fatal error: Uncaught TypeError: Argument 1 passed to getAddValue() must be of the type integer or null, string given, called |
注意点
引数/戻り値が指定した型にキャストできる場合は、自動的にキャスト変換されて
正常終了します。厳密に型チェックを行いたい場合は、declare(strict_types=1)命令を使用する必要があります。
※PHP5でも型宣言(タイプフィンディング)は使用できましたが、
以下の制約がありました。
・戻り値では型宣言ができない。
・引数で型を宣言できるのは配列/オブジェクトのみ
(int/floatのような型宣言はできない)
指定可能な型は以下の通りです。
型名 |
概要 |
使用可能バージョン |
bool | 真偽値 | 7.0.0~ |
float | 浮動小数点数 | 7.0.0~ |
int | 整数 | 7.0.0~ |
string | 文字列 | 7.0.0~ |
array | 配列 | 5.1.0~ |
callable | コールバック関数 | 5.4.0~ |
クラス名 | 指定したクラス | 5.0.0~ |
インターフェイス名 | 指定したインターフェイス | 5.0.0~ |
self | そのメソッドが定義されている クラスと同じクラスのインスタンス |
5.0.0~ |
void | 戻り値が特に無いことを指定 |
7.1.0~ |
2.Null合体演算子
式1 ?? 式2
式1がNullでない場合には式1をそうでない場合は式2を返します。
サンプルプログラム
1 2 3 4 5 |
$message1 = 'こんにちは'."\n"; $message2 = null; print $message1??'ノーコメント1'."\n"; print $message2??'ノーコメント2'."\n"; |
実行結果
$message2はNullのため式2の値が表示されています。
1 2 |
こんにちは ノーコメント2 |
3.宇宙船演算子
2つの式を比較するための演算子です。
左辺<=>右辺
左辺が大きい:戻り値「1」
右辺が大きい:戻り値「-1」
両辺が等しい:戻り値「0」
サンプルプログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// 整数値 echo (1 <=> 1) ."\n"; // 0 echo (1 <=> 2)."\n"; // -1 echo (2 <=> 1) ."\n"; // 1 // 浮動小数点数値 echo (1.5 <=> 1.5) ."\n"; // 0 echo (1.5 <=> 2.5) ."\n"; // -1 echo (2.5 <=> 1.5) ."\n"; // 1 // 文字列 echo ("a" <=> "a")."\n"; // 0 echo ("a" <=> "b")."\n"; // -1 echo ("b" <=> "a")."\n"; // 1 |
実行結果
1 2 3 4 5 6 7 8 |
0 -1 1 0 -1 1 0 -1 |
4.最後に
今回紹介しきれなかった機能を次回紹介します。