2010-10-15 100 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