こんにちはAKIです。
PHPの入門講座をサボり出してから早数ヶ月、書きたい気持ちはあるんですが
入門って難しいですね。どこまで説明すればいいのか分からないんです。
という言い訳はさておき、
最近PHPの7系の新機能を調べるのにハマっていてQiitaに記事をあげていますが、
目に留まった便利なものをブログの方にも更新したいと思います。
PHP7.0
タイプヒンティング
まず、PHP7からタイプヒンティング(型指定)ができるようになりました。
PHPは型指定しなくてもなんでもかんでも動くというのが初心者からすると入門しやすいメリットでもあり、
がっつり使っていくにはデメリットでもあったわけですが、これが5.6系から解消されたのが1番のメジャーバージョンアップかと思います。
php7.0からの新機能null合体演算子の使い方

phpはissetやempty、is_nullなどの型判定がありますが
isset()と三項演算子を組み合わせたパターンはよくあると思います。
$hoge = 'a'; $test = isset($hoge) ? $hoge : 'other'; var_dump($test);
これを
$hoge = 'a'; $test = $hoge ?? 'other'; var_dump($test); $hoge = null; $test = $hoge ?? 'other'; var_dump($test);
と書くことができます。
出力結果 ーーーーー string(1) "a" string(5) "other"
PHP7.1.x
php7.1から使える負の文字列オフセット

php7.1からは負の値のオフセットも指定できるようになりました。
var_dump("abcdef"[-1]); var_dump("abcdef"[2]); var_dump("abcdef"[-3]);
出力結果 ーーーーー string(1) "f" string(1) "c" string(1) "d"
単一文字の場合はsubstr()を使う必要がなくなりそうです。
複数の文字を取り出したり変更したりしたいときは、substr()を使用すればよいです。
ただ、個人的には第三者への可読性という意味ではsubstr()を使ってもいいのかと思います。
php7.1から「$this」の矛盾の修正がされている!?

phpでは$this
は特別な意味を持ちますが、
php7.1から変数名として使ったり、値の代入ができないようにきちんとチェックをすように修正されているとの記述を公式のDocumentを見ていて知りました。
むしろ、当たり前のように使っていたからphp7.0まではチェックしていなかったことを知りませんでした…
php7.1から使えるnullableな型宣言について

- 関数の戻り値の場合
<?php function test_return(): ?string { return 'hogehoge'; } var_dump(test_return()); function test_return(): ?string { return null; } var_dump(test_return());
出力結果 ーーーーー string(8) "hogehoge" NULL
上記のようにstring指定の型でもnullを返すことができます。
- 関数の引数の場合
function test_dump(?string $name) { var_dump($name); } test('hogehoge'); test(null);
出力結果 ーーーーー string(8) "hogehoge" NULL
上記のようにstring指定の型でもnullを渡すことができます。
ちなみに、
test_dump();
で上記関数を呼び出した場合は、
Too few arguments to function test_dump(), 0 passed in ...
が発生します。
なので、
function test_dump(string $name = null) { var_dump($name); }
の定義とは違いますね。
PHP7.2.x
php7.2からeach()関数は非推奨になった

この関数は、配列のkeyとvalueのペアを返す関数ですが、
foreachよりもループが遅く、PHPそのものの変更に伴って実装上の問題を引き起こしたことから非推奨になったそうです。
通常はlist関数と併用することが多いですが、普通にforeachを使えば十分なのであまり困ることはないかと思います。
// 関数サンプル $foo = ["test1", "test2", "test3", "test4"]; $bar = each($foo); var_dump($bar);
出力結果 ーーーーー array(4) { [1]=> string(5) "test1" ["value"]=> string(5) "test1" [0]=> int(0) ["key"]=> int(0) }
PHP7.3.x
PHP7.3からヒアドキュメントのインデントのズレが解消される件

ヒアドキュメントは使う箇所によってはソースの可読性をあげられますが
PHP7.2までは、終了マーカーまでをインデントなしで定義しないとダメでした。
最初PHPでこれを見た時に気持ち悪いなと思ってました。
が、PHP7.3からようやくこの問題が解消されるようです。
<?php class foo { public $bar = <<< EOT barbar hogehoge EOT; }
今まではこう書く必要があったのが、、、
<?php class foo { public $bar = <<< EOT barbar hogehoge EOT; }
と記述できるようになります。
可読性が上がりますね!
いかがでしたでしょうか?
全てではないですが、あくまで私個人として気になったものをまとめました。
今後も更新があれば追記していきたいと思います。
それでは。