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


Author

ahomuAyumu Sato

CyberAgent, Inc.Web開発者 + 技術人事

渋谷資本で生きる名古屋の鳥類

Web 技術、組織開発、料理、旅行、ランニングなど雑多なブログ

Bio: aho.mu
Twitter: @ahomu
Github: ahomu

Related

Latest

Archives

Tags

Search