CodeBlanks Logo Icon CodeBlanks

Closure binding (bindTo)

PHP kursu · Uzman · Ders 13/54

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

  1. 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";
    
  2. 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ı
  3. 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.

Uzman bölümündeki tüm dersler