用call_user_func调用对象的对象方法

sta*_*tac 26 php function dynamic

考虑这个简单的场景:

$this->method($arg1, $arg2);
Run Code Online (Sandbox Code Playgroud)

解:

call_user_func_array(array($this,'method'), array($arg1, $arg2));
Run Code Online (Sandbox Code Playgroud)

考虑这种情况:

$this->object->method($arg1, $arg2);
Run Code Online (Sandbox Code Playgroud)

该解决方案应该有效吗

call_user_func_array(array($this->object,'method'), array($arg1, $arg2));
Run Code Online (Sandbox Code Playgroud)

或者这应该工作?

    call_user_func_array(array($this, 'object','method'), array($arg1, $arg2));
Run Code Online (Sandbox Code Playgroud)

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

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

Gre*_*reg 69

这应该工作:

call_user_func_array(array($this->object,'method'), array($arg1, $arg2));
Run Code Online (Sandbox Code Playgroud)

第一个参数是回调类型,包含对象引用和方法名称.

  • 要自动传递参数,您可以使用“func_get_args()”。例如:`call_user_func_array(array($this,'method'), func_get_args())` (2认同)

dev*_*snd 6

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

$method_name_as_string = 'method_name';
$this->$method_name_as_string($arg1, $arg2);
Run Code Online (Sandbox Code Playgroud)

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