Closure::bindTo

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

Closure::bindTo Yeni bir bağlı nesne ve sınıf bağlamıyla bir closure nesnesini kopyalar

Açıklama

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

Yeni bir anonim işlevi mevcutla aynı gövde ve bağlı değişkenlerde, farklı bir "bağlı nesne" ve yeni bir "sınıf bağlamı"yla oluşturup döndürür.

"Bağlı nesne", işlev gövdesinde bulunacak $this değerini, "sınıf bağlamı" ise, anonim işlevin erişebileceği private ve protected üyeleri belirleyen bir sınıfı temsil eder. Yani, görünür olacak üyeler, anonim işlevin newScope bağımsız değişkeninde değer olarak belirtilen sınıfın yöntemleri olan anonim işlevlerle aynıdır.

Statik closure'lar herhangi bir bağlı nesneye sahip olamadıkları gibi (newThis değeri null olmalıdır) bu işlev de onların sınıf bağlamını değiştirmekte kullanılamaz.

Bu işlev, statik-olmayan bir closure için, sahip olunan bağlı bir örneğin bağlamda olup olmadığını görmek içindir.

Bilginize:

Anonim işlevleri sadece yinelemek istiyorsanız basitçe kopyalama yapabilirsiniz.

Bağımsız Değişkenler

newThis

Anonim işleve bağlaması için verilen nesne ya da bağın kaldırılması için null.

newScope

İlişkili closure'un ilişkilendirileceği sınıf bağlamı ya da ilişkili olanı tutmak için 'static'. Bir nesne belirtilirse bu nesnenin sınıfı geçerli olur. Bu, bağlı nesnenin protected ve private yöntemlerinin görünürlüğünü saptamaya yarar. Bu bağımsız değişkende dahili bir sınıfı (nesnesini) aktarmaya izin verilmez.

Dönen Değerler

Yeni oluşturulan Closure nesnesiyle döner. Başarısız olursa null döner.

Örnekler

Örnek 1 - Closure::bindTo() örneği

<?php

class A {
private
$val;
function
__construct($val) {
$this->val = $val;
}
function
getClosure() {
//bu nesne ve bağlama bağlı closure ile döner
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";
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

1 2

Ayrıca Bakınız

To Top