1. 程式人生 > >PHP中Closure::bindTo的用法分析

PHP中Closure::bindTo的用法分析

最近使用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;