用call_user_func调用对象的对象的方法

2022-08-30 14:08:40

考虑这个简单的场景:

$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 异常,在使用call_user_func时?

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

答案 1

这应该有效:

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

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


答案 2

这是一个黑客变体,可能对某人有用:

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

这使用 PHP 变量变量。丑陋如地狱,但并不比其他人特别丑陋......


推荐