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
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.
Anonim fonksiyonları Javascript dosyal...
PHP Fonksiyon vs. bir Sınıf kullanma z...
Kullanma sınıfı özel bir fonksiyon ile...
Neden anonim fonksiyon tanımlama ve de...
Java nasıl anonim bir fonksiyon yazabi...