PHPで $self = $this してClosureに渡すだなんて...!

PHPでJavaScriptみたいな書き方しちゃったよメモ

クロージャを渡すメソッドに、useで$thisを送りこもうとしたらFatal errorと相成りました。

NGパターン

$thisのまま渡すとダメ。

$this->someMethod(function() use($this) {
    return 'hogehoge';
});
// Fatal error: Cannot use $this as lexical variable in...

OKパターン

$selfとしてローカル変数に移したら正常に動作します。

$self = $this;

$this->someMethod(function() use($self) {
    return 'hogehoge';
});
// hogehoge

PHP5.4なら直接参照できるっぽい

あてずっぽうで$selfと書いて通過してましたが、どうやら定石手法だったようで・・・。

PHP5.3~おもしろい

所用でPimpleを見たり、Silexを試したりしていたのですが、PHP5.3バリバリのライブラリって改めて見ると面白いかも、と思った次第。

PHP5.4も色々あるし、どこかのタイミングでPHPぢからの刷新も必要なのかなぁと思ったり思わなかったり。たぶん今はPHP5.1.x〜5.2.x 周辺が得意です・・・lol