首頁 > 後端開發 > PHP問題 > 在PHP中如何為匿名函數指定this

在PHP中如何為匿名函數指定this

autoload
發布: 2023-03-09 10:34:02
轉載
2270 人瀏覽過

在PHP中如何為匿名函數指定this

    關於閉包匿名函數,在JS中有個很典型的問題就是要為它綁定一個 this 作用域。其實這個問題在PHP中也是存在的,例如下面這段程式碼:

$func = function($say){
    echo $this->name, ':', $say, PHP_EOL;
};
$func('good'); // Fatal error: Uncaught Error: Using $this when not in object context
登入後複製

    在這個匿名函數中,我們使用了$this->name來取得目前作用域下的$name 屬性,可是,這個 $this 是誰呢?我們並沒有定義它,所以這裡會直接報錯。錯誤訊息是:使用了 $this 但是沒有物件上下文,也就是說沒有指定 $this 引用的作用域。

1.bindTo() 方法綁定 $this

#
$func = $func->bindTo($lily, 'Lily');
// $func = $func->bindTo($lily, Lily::class);
// $func = $func->bindTo($lily, $lily);
$func1('cool');
登入後複製

    這回就可以正常輸出了。 bindTo() 方法是複製一個目前的閉包對象,然後給它綁定 $this 作用域和類別作用域。

  •  $lily 參數是一個 object $newthis 參數,也就是給這個複製出來的匿名函數 $this

  •  'Lily' 則是綁定一個新的類別作用域,它代表一個型別、決定在這個匿名函數中能夠呼叫哪些私有和受保護的方法

如果不給這個參數,那麼我們就不能存取這個private$name 屬性了:

$func1 = $func->bindTo($lily);
$func1('cool2'); // Fatal error: Uncaught Error: Cannot access private property Lily::$name
登入後複製

2.call() 方法綁定$this

$func->call($lily, 'well'); // Lily:well
登入後複製

#推薦:2021年PHP面試題大匯總(收藏) 》《php影片教學

以上是在PHP中如何為匿名函數指定this的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:imooc.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板