Bir sınıf önce onu başlatmasını olmadan bir yöntemi çağırır görmek mümkün mü?

3 Cevap php

Ben bir sınıf belirli bir yöntemi çağırmak için gidiyor olmadığını bilmek istiyorum, ama sınıf başlatmasını önce bilmek istiyorum. Bu mümkün mü?

Örnek: Onun __construct() yöntemi içinde class Controller_Index aramalar $this->composite('SomeCompositeClass'). Class SomeCompositeClass bir helloWorld() yöntemi vardır. Ben arayabilirsiniz görmek istiyorsanız Controller_Index->helloWorld().

Benim denetleyicisi bu kompozit sınıfları I ({talep ediyorum yöntemini içeren olmadığını kontrol edebilir, böylece ($this->composite() ile) herhangi bir kompozit sınıfları eklemek için gidiyor Temelde ben [(1)] görmek istiyorum }). Ve ben ilk Controller_Index örneğini zorunda kalmadan bunu yapmak istiyorum.

Teşekkürler!

Edit
I suppose what I want to do is similar to using PHP's Reflection classes to see if a class method exists. But I don't want to know if the method exists, I want to know if the class calls it.

Edit 2
Interfaces won't help because I won't necessarily call $this->composite() from every controller.

Belki ben sadece sorunu yeniden düşünmeye ve farklı bir yaklaşım ile gitmek gerekir.

3 Cevap

Her şeyden önce, genel olarak bunu yapamazsınız. Aslında yürütme olmadan idam olacak eğer sözdizimsel composite, bilmiyorum aramaları tespit dolayısıyla bile hiç kendi yürütülmesinde belli bir noktaya ulaşacak görmek için genel kod analiz, belirsizdir kodu.

Şimdi, pratik anlamda, metin olarak kod yükleme, ve composite çağrıları için inceleyerek bazı kaldıraç almak mümkün olabilir, ama sınıfları yazarsanız bu sadece hiç bir kullanım olacak tutarlı bir şekilde. Bu aramalar benzeri bayrak yanlış, fonksiyon çağrıları zincirleri geride şartlı korunan aramaları edecek gizleme ve göstermeyecektir. Neredeyse kesinlikle böyle bu gibi statik analiz için PHP interfaces gibi, başka bir yöntemi kullanarak daha iyiyiz.

Ben programlama bir sınıfın yapıcı bunu yürütme olmadan asıl dili yorumlama aleme almak istediğiniz sürece, aslında kod yürütme olmadan çalıştırıldığında aramak için ne olup bittiğini tahmin sanmıyorum. IMO, bu yaklaşım bir sınıf belirli bir yöntemi uygulayan sağlamak çok dolambaçlı bir yoldur. Neden kullanmayın interfaces? Ayrıca type hinting sadece arayüz tipi (sizin hellowworld içeren () yöntemi) kompozit () metodu tarafından kullanılmasını sağlamak için kullanmak için kompozit () yöntemi refactor mümkün olabilir.

Sadece bunun herhangi bir nesneyi başlatan olmadan denir bir sınıf işlevi olmasını istiyorsanız, Siz "static method" arıyoruz.

Temelde statik yöntemler sınıf DEĞİL sınıf nesnesine aittir. Böylece ilk 'Class1::doStaticMethodAction()' gibi başlatılıyor olmadan denilen olabilir.