無名関数に対応するClosure
クラスにcall()
メソッドが増えました。これはJavaScriptのFunction.prototype.call
に対応するようなメソッドで、次のように使えます。
<?php
class Foo { private $bar = 'baz'; }
(function () { var_dump($this->bar); })->call(new Foo()); // string(3) "baz"
なんと、クラス外の関数をあたかもインスタンスメソッドのように呼び出すことができています。
といっても、これはPHP 5.4で導入されたClosure::bindTo()
でも実現できることです。
<?php
class Foo { private $bar = 'baz'; }
(function () { var_dump($this->bar); })->bindTo(new Foo(), 'Foo')(); // string(3) "baz"
とはいえClosure::call()
の方が断然読みやすいので良いと思います。