(PHP 5 >= 5.4.0, PHP 7, PHP 8)
Closure::bindTo — 復(fù)制當(dāng)前閉包對(duì)象,綁定指定的$this對(duì)象和類作用域。
創(chuàng)建并返回一個(gè) 匿名函數(shù), 它與當(dāng)前對(duì)象的函數(shù)體相同、綁定了同樣變量,但可以綁定不同的對(duì)象,也可以綁定新的類作用域。
“綁定的對(duì)象”決定了函數(shù)體中的 $this
的取值,“類作用域”代表一個(gè)類型、決定在這個(gè)匿名函數(shù)中能夠調(diào)用哪些 private 和 protected 的方法。
也就是說(shuō),此時(shí) $this 可以調(diào)用的方法,與 newScope
類的成員函數(shù)是相同的。
靜態(tài)閉包不能有綁定的對(duì)象(
newThis
參數(shù)的值應(yīng)該設(shè)為
null
)不過(guò)仍然可以用 bindTo 方法來(lái)改變它們的類作用域。
此函數(shù)確保對(duì)于非靜態(tài)閉包,擁有綁定實(shí)例也意味著被限定作用域,反之亦然。
為此,非靜態(tài)閉包給定一個(gè) null
實(shí)例的作用域可以使其變?yōu)殪o態(tài),
非靜態(tài)無(wú)作用域的閉包給定一個(gè)非 null 的實(shí)例作用在一個(gè)非指定類。
注意:
如果你只是想要復(fù)制一個(gè)匿名函數(shù),可以用 cloning 代替。
newThis
綁定給匿名函數(shù)的一個(gè)對(duì)象,或者
null
來(lái)取消綁定。
newScope
關(guān)聯(lián)到匿名函數(shù)的類作用域,或者 'static' 保持當(dāng)前狀態(tài)。如果是一個(gè)對(duì)象,則使用這個(gè)對(duì)象的類型為新的類作用域。 這會(huì)決定綁定的對(duì)象的 保護(hù)、私有成員 方法的可見(jiàn)性。 不允許內(nèi)部類(的對(duì)象)作為參數(shù)傳遞。
返回新創(chuàng)建的 Closure 對(duì)象,
或者失敗時(shí)返回 null
。
示例 #1 Closure::bindTo() 實(shí)例
<?php
class A {
function __construct($val) {
$this->val = $val;
}
function getClosure() {
// 返回綁定到此對(duì)象和作用域的閉包
return function() { return $this->val; };
}
}
$ob1 = new A(1);
$ob2 = new A(2);
$cl = $ob1->getClosure();
echo $cl(), "\n";
$cl = $cl->bindTo($ob2);
echo $cl(), "\n";
?>
以上例程的輸出類似于:
1 2