PHP5までは、関数適用などを組み合わせた文を書くとエラーになることがありました。例えば次のような文はPHP5では不正ですが、PHP7から正しい文になります。
<?php
function foo() {
return function () {
var_dump(123);
};
}
foo()(); // PHP7で動く、PHP5ではエラー
また、カッコで囲った任意の式に対して関数適用やメソッド呼び出し・配列アクセスなどができるようになりました。難しい式を書いたときなど、読みやすくできるのは良いですね。
<?php
Class Foo
{
static public function bar() {
new Foo();
}
public function baz() {
var_dump(123);
}
}
(Foo::bar())->baz(); // PHP7で動く、PHP5ではエラー
特に、無名関数をその場で呼び出せるようになったのは進歩かなと思います。ようやく他の言語に追いついた感がありますね。
<?php
// PHP7で動く、実用的かどうかは疑問
foreach ((function ($x) { while (1) { yield $x++; } })(100) as $v) {
var_dump($v);
if ($v == 105) break;
}
/*
int(100)
int(101)
int(102)
int(103)
int(104)
int(105)
*/
ちなみに、この手の改善は今までのPHPでも行われています。次のようにPHP5.4やPHP5.5で書けるようになった表現もあります。念のため。
<?php
Class Foo
{
public function bar() {
var_dump(123);
}
}
(new Foo())->bar(); // PHP5.4以降で動く:int(123)
var_dump(range(0,5)[4]); // PHP5.4以降で動く:int(5)
var_dump(['foo','bar'][1]); // PHP5.5以降で動く:string(3) "bar"