用call_user_func调用对象的对象方法

时间:2009-06-11 12:04:46

标签: php function dynamic

考虑这个简单的场景:

$this->method($arg1, $arg2);

解决方案:

call_user_func_array(array($this,'method'), array($arg1, $arg2));

考虑这种情况:

$this->object->method($arg1, $arg2);

此解决方案是否有效?

call_user_func_array(array($this->object,'method'), array($arg1, $arg2));

或者这应该有用吗?

    call_user_func_array(array($this, 'object','method'), array($arg1, $arg2));

编辑: try / catch是否适用于SOAP异常,triger同时使用call_user_func?

  try {
    $soap_res = call_user_func_array(array($this->service,'getBanana'), array(0, 10));
} catch (SoapFault $fault) {
    die($fault->faultstring)
} 

2 个答案:

答案 0 :(得分:64)

这应该有效:

call_user_func_array(array($this->object,'method'), array($arg1, $arg2));

第一个参数是callback type,包含对象引用和方法名称。

答案 1 :(得分:5)

这是一个hackish变种,可能对某人有用:

$method_name_as_string = 'method_name';
$this->$method_name_as_string($arg1, $arg2);

这使用PHP变量。像地狱一样丑陋,但并不比其他人更加丑陋......