PHP5.4のClosure::bindToを使ってJavaScriptのクロージャもどき作った
PHP5.4からClosure::bindToとClosure::bindというのが追加されている。
これは何かというと、JavaScriptで言うところのFunction.prototype.callみたいな感じで、無名関数に対してオブジェクトを割り当てることができ、その無名関数をそのオブジェクトのメソッドと同等のスコープで実行できるようにする。
<?php /** * 適当にクラスを定義 */ class Hoge { private $_hoge = "hoge"; } /** * 無名関数を定義 */ $function = function () { var_dump($this->_hoge); }; /** * Hogeクラスのインスタンスをbind */ $function = $function->bindTo(new Hoge()); $function(); // string(4) "hoge";
PHP5.3で同じようなことをしようと思うとuseキーワードを使って静的に行う必要があったので、それが動的にできるというのは結構いいかもしれない。
本題
で、ちょっと遊んでみようと思ってJavaScriptのクロージャもどきを作ったんだけど、誰得なんだよwwwと一人でニヤニヤしてしまったので久々にブログを書きました。