Java için PHP __ çağrı eşdeğer

5 Cevap java

__call of PHP için bir Java eşdeğer var mı?

Bu durumda değilse muhtemelen derleyici hataları neden olur, çünkü bana mantıklı olur.

Kimden PHP manual on magic methods:

Bir nesne bağlamında erişilemeyen yöntemler çağrılırken __call() tetiklenir.

5 Cevap

PHP, Python ve Ruby gibi dinamik yazdığınız dilde yaygın olan dinamik bir yöntem / nitelik kararın bu tür doğrudan Java dilinde desteklenmez.

Etkisi uygulaması dinamik çözülecektir hangi bir arayüze sahip gerektirir Dynamic Proxies hangi kullanarak tahmin edilebilir. Böyle CGLIB benzer şeyler normal bir Java sınıfları ile yapılabilir izin gibi üçüncü parti kütüphaneler.

Bu API tabanlı, yöntem çağırma özel durum durdurma olarak uygun değildir, doğrudan, hep destek, diğer dinamik yazdığınız dillerde PHP veya eşdeğer özellikleri __call ile olsun (örneğin {[(1 olabilir) }] Python). Bu fark, yöntem gönderme dillerin iki tip ele edildiği temelde farklı şekillerde kaynaklanmaktadır.

Hayır, yok.

Diğer dediği gibi, java bu desteklemiyor.

o (PHP'nin __ () çağrısı gibi ziyade tanımsız yöntemleri) bilinen yöntemleri aramaları durdurabilen bir proxy sınıf denilen bir şey var. Bir proxy herhangi bir arayüz etrafında sarıcı olarak dinamik oluşturulabilir:

http://tutorials.jenkov.com/java-reflection/dynamic-proxies.html#proxy

http://java.sun.com/j2se/1.4.2/docs/guide/reflection/proxy.html#examples

Foo foo = (Foo) DebugProxy.newInstance(new FooImpl());
foo.bar(null);

foo bir Foo gibi görünüyor, ama tüm çağrılar FooImpl en çağırma () metodu tarafından yakalanmaktadır.

kendi arayüzünde dinamik yöntemler ile zamanında gerçekten de novo sınıf oluşturmak için, aslında bir sınıf tanımını derlemek ve zamanında onu almak için java sınıf yükleyici kullanabilirsiniz. apache's JCI ya da benzeri bir alet Arch4J sizin için bu işleyebilir. hala, sınıf sadece belirlediğiniz bu yöntemleri olacaktır.

Hayır, java derlenmiş bir dildir ve derleyici aramak her fonksiyonu aslında var olduğundan emin olmak istiyor.

Hayır, Java bu özelliği yoktur. Bir kere, ben (bazı aşırı yüklenmelerin zaten kötü bir fikir olduğunu savunuyorlar, ama bunun tartışmaya doğru forum değil) hemen hemen imkansız aşırı yükleme yapmak düşünüyorum. Bunun ötesinde, ben Java tasarımcılar sadece hissediyorum anlamda olsun o böyle esneklik şey derler herhangi bir kod yalnızca aradığını garantisi ile galip olan (ben AUTOLOAD denir Perl onu biliyorum) aslında (ikili uyumsuzlukları engelleme) mevcut yöntemleri.