PHP:call_user_func_array:通过基准问题

问题描述:

下面的功能产生错误时函数包含引用的论据,例如通过:PHP:call_user_func_array:通过基准问题

function test(&$arg, &$arg2) 
{ 
    // some code 
} 

现在我不能为上述功能使用call_user_func_array,它会产生一个错误。

如何解决这个问题?我需要使用call_user_func_array

也假设我不知道他们是通过引用传递还是通过值传递。

感谢

+4

如果您不接受当前的答案,这将是值得的,因为它完全是错误的(更不用说通过滥用改变问题语义的对象完全错误的建议):http://codepad.viper-7 .com/j3GOps – ircmaxell 2011-12-01 17:22:30

一个伟大的解决办法被张贴在http://www.php.net/manual/de/function.call-user-func-array.php#91503

function executeHook($name, $type='hooks'){ 
    $args = func_get_args(); 
    array_shift($args); 
    array_shift($args); 
    //Rather stupid Hack for the call_user_func_array(); 
    $Args = array(); 
    foreach($args as $k => &$arg){ 
     $Args[$k] = &$arg; 
    } 
    //End Hack 
    $hooks = &$this->$type; 
    if(!isset($hooks[$name])) return false; 
    $hook = $hooks[$name]; 
    call_user_func_array($hook, $Args); 
} 

实际的黑客被评论所包围。

+1

谢谢你,救了我的命!这绝对是正确的答案 – Mangiucugna 2013-11-23 15:29:35

+0

切斯,谢谢! – maryisdead 2015-07-22 16:32:40

+0

说得太快......虽然这消除了错误,但它不会让我操作可调用内部的引用变量。 – maryisdead 2015-07-22 16:52:53

当存储阵列中的参数,请确保您存储这些参数的引用,它应该工作的罚款。

即:

call_user_func_array("test", array(&param1, &param2)); 
+2

但如果我事先不知道他们是通过引用还是通过价值传递? – Sarfraz 2009-12-15 07:54:32

+1

然后找出一个方法来确定,或使他们都通过引用传递将是我的建议。恐怕没什么其他的事了。 – Myles 2009-12-15 07:58:07

+0

Myles:如果我不知道数组中参数的数量是多少? – ymakux 2015-08-03 15:43:32