docs指出「call_user_func()的參數不通過引用傳遞」。在給定的例子
function increment(&$var)
{
$var++;
}
call_user_func('increment', $a);
的$a
的值不會遞增,PHP將拋出一個警告,而不是Parameter 1 to increment() expected to be a reference, value given
。 Callabe內部的代碼將不會執行,但call_user_func()
的結果爲NULL。
因爲Call-time pass-by-reference
已在PHP 5.4中刪除,所以您不能使用call_user_func('increment', &$a)
調用函數。 這是這個例子應該證明的。
使用call_user_func_array()
允許參數作爲參考被傳遞,所以
$a = 0;
call_user_func_array('increment', array(&$a));
結果1.
要使用可調用沒有參考,return
從函數的值,並指定這個返回值以美元代替:
function increment($var)
{
$var++;
return $var;
}
$a = 0;
$a = call_user_func('increment', $a);
print 'a: ' . $a . PHP_EOL;
結果:
a: 1
你到底明白了什麼? – Mureinik
call_user_func_array('increment',array(&$a)); –
)數組(&$ a)是什麼意思?$ a的初始值是什麼? –