SORU
5 Aralık 2011, PAZARTESİ


Anonim fonksiyon bu kullanma $

PHP manuel devletler

Olası PHP önce bir anonim fonksiyon $this kullanmak için değil 5.4.0

anonymous functions page. Ama iş başvurusu için bu $atama ve işlev tanımı use ifadesi için başvuru geçerek yapabilirim buldum.

$CI = $this;
$callback = function () use ($CI) {
    $CI->public_method();
};

Bu iyi bir uygulamadır, ve anonim bir fonksiyonu PHP 5.3 ile bu $erişim için daha iyi bir yolu var mı?

Düzenleme:Nesneler PHP varsayılan olarak ref tarafından atandığından ref karakter atamak & kaldırıldı. $CI = &$this $CI = $this olur

CEVAP
5 Aralık 2011, PAZARTESİ


Bu şekilde kullanarak dışarıdan arama sayılıyor çünkü korumalı veya özel yöntemini çağırmak çalıştığınızda başarısız olur. Biliyorum, ama beklendiği gibi PHP çalışacak 5.4, gel kadarıyla 5.3 bu geçici bir çözüm yolu, kutu yok:

class Hello {

    private $message = "Hello world\n";

    public function createClosure() {
        return function() {
            echo $this->message;
        };
    }

}
$hello = new Hello();
$helloPrinter = $hello->createClosure();
$helloPrinter(); // outputs "Hello world"

Daha da değiştirmek mümkün olacak ne zamanında bu $noktaları, anonymus fonksiyonları için (kapatma) yeniden birleştirme:

class Hello {

    private $message = "Hello world\n";

    public function createClosure() {
        return function() {
            echo $this->message;
        };
    }

}

class Bye {

    private $message = "Bye world\n";

}

$hello = new Hello();
$helloPrinter = $hello->createClosure();

$bye = new Bye();
$byePrinter = $helloPrinter->bindTo($bye, $bye);
$byePrinter(); // outputs "Bye world"

Etkili, anonymus fonksiyonları ilk parametre belirtmek için kullanılabilir bindTo() method, Bu puan bir dolar, ve ikinci parametre kontrolleri vargörünürlük düzeyi ne olmalı. Eğer ikinci parametre, atlarsanız, görünürlük arama gibi olacak "", eg. tek ortak özellikleri erişilebilir. Ayrıca yol not bindTo çalışır hale getirmek için özgün işlevini değiştirmek değildiryeni bir tane verir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DrakeVEVO

    DrakeVEVO

    17 AĞUSTOS 2009
  • Nightmare2005

    Nightmare200

    14 Ocak 2007
  • Sean Murphy

    Sean Murphy

    4 ŞUBAT 2009