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

  • Jabari Johnson

    Jabari Johns

    18 Ocak 2008
  • RobertDuskin

    RobertDuskin

    12 HAZİRAN 2008
  • Tips On Linux

    Tips On Linu

    26 Temmuz 2008