Closure::bindTo
(PHP 5 >= 5.4.0, PHP 7, PHP 8)
Closure::bindTo — 複製目前閉包對象,繫結指定的$this對像和類作用域。
說明
建立並返回一個 匿名函式, 它與目前對象的函式體相同、繫結了同樣變數,但可以繫結不同的對象,也可以繫結新的類作用域。
「繫結的對象」決定了函式體中的 $this
的取值,「類作用域」代表一個型別、決定在這個匿名函式中能夠呼叫哪些 private 和 protected 的方法。
也就是說,此時 $this 可以呼叫的方法,與 newScope
類的成員函式是相同的。
靜態閉包不能有繫結的對象(
newThis
參數的值應該設為
null
)不過仍然可以用 bindTo 方法來改變它們的類作用域。
此函式確保對於非靜態閉包,擁有繫結實例也意味著被限定作用域,反之亦然。
為此,非靜態閉包給定一個 null
實例的作用域可以使其變為靜態,
非靜態無作用域的閉包給定一個非 null 的實例作用在一個非指定類。
注意:
如果你只是想要複製一個匿名函式,可以用 cloning 代替。
參數
-
newThis
-
繫結給匿名函式的一個對象,或者
null
來取消繫結。 -
newScope
-
關聯到匿名函式的類作用域,或者 'static' 保持目前狀態。如果是一個對象,則使用這個對象的型別為新的類作用域。 這會決定繫結的對象的 保護、私有成員 方法的可見性。 不允許內部類(的對象)作為參數傳遞。
返回值
返回新建立的 Closure 對象,
或者失敗時返回 null
。
範例
示例 #1 Closure::bindTo() 實例
<?php
class A {
function __construct($val) {
$this->val = $val;
}
function getClosure() {
// 返回繫結到此對像和作用域的閉包
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
參見
- 匿名函式
- Closure::bind() - 複製一個閉包,繫結指定的$this對像和類作用域。