(PHP 5 >= 5.4.0, PHP 7)
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 yenibağlam
değiştirgesinde değer
olarak belirtilen sınıfın yöntemleri olan anonim işlevlerle aynıdır.
Duruk closure'lar herhangi bir bağlı nesneye sahip olamadıkları gibi (yeninesne
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, duruk-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.
yeninesne
Anonim işleve bağlaması için verilen nesne ya da
bağın kaldırılması için NULL
.
yenibağlam
İ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 değiştirgede dahili bir sınıfı (nesnesini) aktarmaya izin verilmez.
Yeni oluşturulan Closure nesnesiyle döner
başarısızlık durumunda FALSE
döner
Sürüm: | Açıklama |
---|---|
7.0.0 |
yenibağlam ile artık dahili bir sınıf (nesne)
belirtilemiyor, evvelce yapılabiliyordu.
|
Örnek 1 - Closure::bindTo() örneği
<?php
class A {
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