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
public Closure::bindTo(
?object $newThis
,
object|string|null $newScope
= "static"):
?Closure
"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: