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

  • 8bitdigitaltv

    8bitdigitalt

    31 AĞUSTOS 2011
  • mist64

    mist64

    30 Mayıs 2006
  • Shanice Caruthers

    Shanice Caru

    27 EKİM 2011