call_user_func_array (callable $callback, array $param_arr)
參數1: 調用一個回呼函數,
參數2: 數組參數是回呼函數的參數.
call_user_func(callable $callback, $mixed $parameter, $mixed $...)
參數1:調用的回呼函數
參數2-n:回呼函數的參數.
比較這兩者的不同哦. 前者的第二個參數必須是 數組.
情況一:調用普通的函數.
<?phpfunction barber($type){ echo "You wanted a $type haircut, no problem\n";}call_user_func('barber', "mushroom");call_user_func('barber', "shave");?>
這裡,第一個參數直接指定函數的名稱.
<?phpfunction barber($type){ echo "You wanted a $type haircut, no problem\n";}call_user_func_array('barber', array("mushroom"));call_user_func_array('barber', array("shave"));?>
還是比較一下這兩者之間的不同.
看出來的請繼續.
情況二: 調用類中的靜態函數.
下面是call_user_func_arr
namespace Foo;class F {public static function showName ($name) {return strtoupper($name);}}echo call_user_func_array(__NAMESPACE__.'\F::showName', array('vein'));echo call_user_func_array(array(__NAMESPACE__.'\F', 'showName'), array('vein'));$f = new F();echo call_user_func_array(array($f, 'showName'), array('vein'));
下面是call_user_func
namespace Foo;class F {public static function showName ($name) {return strtoupper($name);}}echo call_user_func(__NAMESPACE__ . '\F::showName','vein');echo call_user_func(array(__NAMESPACE__ . '\F','showName'),'vein');$f = new F();echo call_user_func(array($f, 'showName'),'vein');
情況三:動態方法引動過程
call_user_func
namespace Foo;class F {public function showAge ($age) {return $age + 100;}}call_user_func(__NAMESPACE__ . '\F::showAge',23);
這裡要注意一點,如果這樣調用的話,系統會報錯,提示
call_user_func() expects parameter 1 to be a valid callback, non-static method Foo\F::showAge() should not be called s
tatically
解釋一下: 這個函數的第一個參數必須是 有效回呼函數, 非靜態方法showAge() 是不允許調用的.
需要的解決方案是:
namespace Foo;class F {public static function showName ($name) {return strtoupper($name);}public function showAge ($age) {return $age + 100;}}$f = new F(); echo call_user_func(array($f, 'showAge'),23);
對於這樣的動態函數的調用,必須提前進行對象執行個體化,
然後將執行個體化之後的對象傳入函數作為第一個參數.
call_user_func_array :
namespace Foo;class F {public static function showName ($name) {return strtoupper($name);}public function showAge ($age) {return $age + 100;}}$f = new F(); echo call_user_func_array(array($f, 'showAge'),array(23));
這樣也是可行的.
總結一下: call_user_func_array 和 call_user_func 兩個函數基本上是類似的,只是在調用上傳遞參數時存在一些差異.
記住一點,call_user_func_array 傳遞的第二個參數必須是數組,
call_user_func 傳遞的第二個參數可能是數組.如果是多個參數的話,還是需要以列表的形式列出.