2010-10-15 97 views
7

我有兩個對象。對象A和B.用字符串調用php方法

A具有返回B.一個方法,我想等我使用一個字符串調用方法B的內部,像這樣動態調用此:

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

但如果這樣做:

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

它不起作用。有任何想法嗎?

+0

不應該先調用'$ a-> getB()'來獲得* B *嗎? – Gumbo 2010-10-15 15:03:13

+0

爲什麼你的方法沒有'()'? – Shikiryu 2010-10-15 15:07:58

回答

18

你不能這樣做。 $method只能包含方法名稱A。閱讀關於variable functions。儘管你可能需要變量,例如

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

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

但是,重新考慮問題,考慮代碼的另一個結構和/或查看設計模式可能會更好。

問題是:你的最終目標是什麼?

+0

對不起,引發了一箇舊線程,但這個問題和答案適用於我。我正在考慮爲ajax調用創建一個php api。這是否是允許javascript將方法作爲字符串與對象進行交互的最佳方式? – Bill 2014-02-16 02:30:03

+2

你可以這樣做。你可能還想看看['__call'](http://www.php.net/manual/en/language.oop5.overloading.php#object.call)。我不能告訴你什麼是最好的方法。這聽起來像你想做遠程過程調用(RPC)*。已經有一些庫,所以你也可以看看那些。 – 2014-02-16 02:35:38

+0

我實際上喜歡關於php的東西 – ahnbizcad 2016-06-29 01:46:59