#PHP7をサラッと触った感想
12/4に PHP 7 がメジャーアップデートされましたので早速触ってました。
出来るようになったことを簡単に紹介する前に…PHP7はPHP5.x系に比べると速度がかなり早くなっているとの事、どの程度早くなったか…。
<?
$time_start = microtime(true);
$count = 0;
for ($i = 0; $i < 10000000; $i++) {
$count++;
}
$time_end = microtime(true);
$time = $time_end - $time_start;
var_dump($time);
(☞´◉ ਊ ◉)☞ドォオン
// PHP5.1
// float(0.700210809708)
// php 5.4
// float(0.4266359806221)
// php 7
// float(0.15863871012235)
単純な計算でもだいぶ早くなった。
また、ブラウザからPHP7を使ったページの表示も数値以上のスピードが出ている印象です。実際に見る側にとってはありがたい話です。
追加された機能とか
全てのPHPerがよく使うであろうものをササッとピックアップ。
戻り値の型指定
関数の戻り値の型が指定できるようになりました。()以降に:
+型を指定で設定します。
<?
function poipoi($a, $b){
return $a + $b;
}
function hoge($a, $b): float {
return $a + $b;
}
var_dump(poipoi(1,1));
// int(2)
var_dump(hoge(1,1));
// froat(2)
弱い型付けだと自動で指定した型に変換されてしまうみたいですね。
オブジェクトを指定することも出来ます。その場合はクラス名を指定するだけです。便利。
こっそりスカラ型(int, float, string, bool)も指定できるようになっています。まあ便利。
宇宙船演算子
より大きい、小さい、等しいを判定する演算子<=>
が増えました。
実際の動作はこんな感じになります。
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
Null合体演算子
かゆいところに手が届くうれしい実装です。ようやく実装されたなという感じです。
$value = $_GET['val'] ?? 'no_value';
フォーエバーisset()
$_GET['val']
が存在したらその値を。存在しなかったら'no_value'を与えます。$_GET['val']
が存在しない場合でもエラーが出ないのがいいですね。
これが出来なくて安全に値を取得する便利メソッドを書いたりしていましたが卒業出来そうです。
その他いろいろな機能が追加されたり変化しましたが特に大きな変化だったなと思う部分は
殆どのエラーが例外としてCatchできるようになったということ
エラーを例外としてCatchする
さくっとテスト
<?
$hoge = null;
try {
$hoge->moge();
} catch (Error $e) {
var_dump($e->getMessage());
}
// string(39) "Call to a member function moge() on null"
SUGOI
ぶっちゃけFatal errorを出すコードはイカンでしょ
今までのPHPならFatal errorだったのですが…これはユニットテストが捗りそうです。
##参考
PHP: rfc https://wiki.php.net/rfc
PHP マニュアル:https://secure.php.net/manual/ja/index.php