2009-12-15 70 views
6

下面的功能產生錯誤時函數包含引用的論據,例如通過: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

回答

7

一個偉大的解決辦法被張貼在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

21

當存儲陣列中的參數,請確保您存儲這些參數的引用,它應該工作的罰款。

即:

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