PHP
Closure binding (bindTo)
bindTo() ile bir closure'ı farklı bir nesneye bağlamayı öğrenirsin.
bindTo ile $this bağlama
Bir closure, tanımlandığı bağlamda $this'i kullanamaz. Ama bindTo($newThis) ile farklı bir nesneye bağlanır; $this artık o nesneyi gösterir.
Örneğin $cb = function () { return $this->name; }; tanımı tek başına çağrılamaz. $cb->bindTo($obj) yeni bir closure döndürür ve $this $obj olur.
Bu, closure'ları farklı sınıflarda yeniden kullanmanın güçlü bir yoludur; sahte yöntem (fake method) gibi davranır.
Closure::bind statik yöntemi
Closure::bind($cb, $newThis, $scope) statik bir yöntemdir. bindTo ile aynı işi yapar ama mevcut closure'a dokunmaz; yeni bir closure döndürür.
Üçüncü parametre $scope, $this'in hangi sınıfın görünürlük alanından bakacağını belirler. Özel (private) alanlara erişmek için sınıf adını verirsin.
Hangisini seçeceğin üslup meselesidir: bindTo nesne yönlü, Closure::bind statik çağrıdır.
Uygulama Closure'u stdClass'a bağla
$greet adında bir closure tanımla: function () { return 'Merhaba ' . $this->name; }. $obj = new stdClass; ile nesne oluştur ve $obj->name = 'Ayşe'; ata. Closure'u bindTo($obj) ile $bound'a bağla. echo $bound() . "\n"; ile sonucu yazdır.
Örnek çözümü göster
$greet = function () { return 'Merhaba ' . $this->name; }; yaz. $obj = new stdClass; $obj->name = 'Ayşe'; ata. $bound = $greet->bindTo($obj); ile bağla. echo $bound() . "\n"; yaz.
Örnek çözüm:
<?php
// Closure'u bindTo ile stdClass nesnesine bağla
$greet = function () {
return 'Merhaba ' . $this->name;
};
$obj = new stdClass;
$obj->name = 'Ayşe';
$bound = $greet->bindTo($obj);
echo $bound() . "\n";
Kendini test et
-
bindTo çağrısını tamamla
<?php
$greet = function () { return $this->name; };
$obj = new stdClass;
$obj->name = 'Ayşe';
$bound = $greet->____($obj);
echo $bound() . "\n";
Cevabı göster
<?php
$greet = function () { return $this->name; };
$obj = new stdClass;
$obj->name = 'Ayşe';
$bound = $greet->bindTo($obj);
echo $bound() . "\n";
-
Bağlama kavramlarını eşleştir
- bindTo()
- Örnek yöntemi
- Closure::bind()
- Statik yöntem
- $this
- Bağlanan nesne
- scope
- Görünürlük alanı
-
bindTo ne yapar?
- Closure'u yeni bir $this ile bağlar
- Closure'u siler
- Closure'u diziye çevirir
- Closure'u metne dönüştürür
Cevabı göster
Closure'u yeni bir $this ile bağlar — Doğru. bindTo($obj) closure'u yeni nesneye bağlar; $this artık $obj olur.
Sıradaki ders: Özet - Closure ve callback