摘要: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 )