PHP中Closure::bindTo的用法分析
阿新 • • 發佈:2018-12-20
最近使用laravel-admin開發一個後臺,過程中發現了這麼一個呼叫:
在display方法的閉包函式中,使用了$this去獲取值($this是laravel中的Model,這裡取的是資料庫中返回值)
// 不存在的`full_name`欄位
$grid->column('full_name')->display(function () {
return $this->first_name . ' ' . $this->last_name;
});
覺得很疑惑,怎麼能這樣呼叫,函式裡的$this表示什麼。之後閱讀了程式碼,發現使用了Closure::bindTo這個東西。
我舉個例子,這樣就可以使用Hen類中的name成員:
class Hen { public $name = 'hen~'; public function play(Closure $call) : string { $call = $call->bindTo($this); return call_user_func($call); } } $hen = new Hen(); echo $hen->play(function(){ return $this->name; }), PHP_EOL;