2010-10-15 21 views
7

İki nesnem var. Nesne A ve BDizelerle php yöntemlerini çağırma

A B'yi döndüren bir yöntem olan Ve ben şöyle B'nin içinde bir yöntemi çağırmak için bir dize kullanmak böylece dinamik olarak bu aramak istiyorum:

$method = 'getB()->someMethod'; 

Ama bunu yaparsan :

$a = new A(); 
$a->$method(); 

Çalışmıyor. Herhangi bir fikir?

+0

* B * 'yi almak için '$ a-> getB()' yi çağırmadınız mı? – Gumbo

+0

Metodunuz niçin '()'? – Shikiryu

cevap

18

Bunu böyle yapamazsınız. $method yalnızca A yönteminin adını içerebilir. variable functions hakkında okuyun. Gerçi değişkenlere sahip olabilirsiniz, ör.

$method1 = 'getB'; 
$method2 = 'someMethod'; 

$a->$method1()->$method2(); 

Ama muhtemelen sorunu yeniden düşünmeye Kodunuzdaki ve/veya tasarım desenleri bir göz sahip başka yapısını göz önünde bulundurmak daha iyi olurdu.

Soru şudur: Nihai hedefiniz nedir?

+0

Eski bir iş parçacığı kıvılcım kusura bakmayın ama bu soru ve cevap bana uygulandı. Ajax aramaları için bir php api oluşturmayı düşünüyorum. Bu, javascript'in bir nesne ile etkileşime geçmek için dizge olarak yöntem göndermesine izin vermenin en iyi yolu olur mu? – Bill

+2

Bunu böyle yapabilirsiniz. ['__call'] 'a da bakmak isteyebilirsiniz (http://www.php.net/manual/en/language.oop5.overloading.php#object.call). Sana en iyi yolun ne olduğunu söyleyemem. Yapmak istediğiniz gibi geliyor * uzaktan prosedür çağrıları (RPC) *. Bunun için zaten bazı kütüphaneler var, o yüzden bunlara da bakabilirsiniz. –

+0

Aslında php hakkında bir şey – ahnbizcad

İlgili konular