PHP 中call_user_func 函數和call_user_func_array 函數的區別
PHP中call_user_func()
函數和call_user_func_array()
函數都是回調函數,在寫接口的時候經常會用到,但是他們有什麼區別呢?
它們的第一個參數都是被調用的回調函數,call_user_func()
還可以有多個參數,它們都是回調函數的參數,call_user_func_array()
只有兩個參數,第二個參數是要被傳入回調函數的數組,這個數組得是索引數組。
所以它們最大的區別就是:
- 如果傳遞一個數組給
call_user_func_array()
,數組的每個元素的值都會當做一個參數傳遞給回調函數,數組的key回調掉。 - 如果傳遞一個數組給
call_user_func()
,整個數組會當做一個參數傳遞給回調函數,數字的key還會保留住。
比如有個如下的回調函數:
function test_callback(){
$args = func_get_args();
$num = func_num_args();
echo $num."个参数:";
echo "
<pre>";
print_r($args);
echo "</pre>
";
}
然後我們分別使用call_user_func
函數和call_user_func_array
函數進行回調:
$args = array (
'foo' => 'bar',
'hello' => 'world',
0 => 123
);
call_user_func('test_callback', $args);
call_user_func_array('test_callback', $args);
最後輸出結果:
1 個參數: Array ( [0] => Array ( [foo] => bar [hello] => world [0] => 123 ) ) 3個參數: Array ( [0] => bar [1] => world [2] => 123 )