(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
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.
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.
Ö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