複製目前閉包對象,繫結指定的$this對像和類作用域。

Closure::bindTo

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

Closure::bindTo 複製目前閉包對象,繫結指定的$this對像和類作用域。

說明

public Closure::bindTo(?object $newThis, object|string|null $newScope = "static"): ?Closure

建立並返回一個 匿名函式, 它與目前對象的函式體相同、繫結了同樣變數,但可以繫結不同的對象,也可以繫結新的類作用域。

「繫結的對象」決定了函式體中的 $this 的取值,「類作用域」代表一個型別、決定在這個匿名函式中能夠呼叫哪些 private 和 protected 的方法。 也就是說,此時 $this 可以呼叫的方法,與 newScope 類的成員函式是相同的。

靜態閉包不能有繫結的對象( newThis 參數的值應該設為 null)不過仍然可以用 bindTo 方法來改變它們的類作用域。

此函式確保對於非靜態閉包,擁有繫結實例也意味著被限定作用域,反之亦然。 為此,非靜態閉包給定一個 null 實例的作用域可以使其變為靜態, 非靜態無作用域的閉包給定一個非 null 的實例作用在一個非指定類。

注意:

如果你只是想要複製一個匿名函式,可以用 cloning 代替。

參數

newThis

繫結給匿名函式的一個對象,或者 null 來取消繫結。

newScope

關聯到匿名函式的類作用域,或者 'static' 保持目前狀態。如果是一個對象,則使用這個對象的型別為新的類作用域。 這會決定繫結的對象的 保護、私有成員 方法的可見性。 不允許內部類(的對象)作為參數傳遞。

返回值

返回新建立的 Closure 對象, 或者失敗時返回 null

範例

示例 #1 Closure::bindTo() 實例

<?php

class {
    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

參見

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *