call_user_func
官方的解釋是:把第一個參數作為回調函數(callback
),並且將其余的參數作為回調函數的參數。
第一個參數可以是函數名,后面的均為作為該函數使用的參數。
1. call_user_func的初步使用
看例子:
// 1. 初步使用 function sayHi($name){ echo $name .' say hi' ."<br>"; } call_user_func('sayHi','Bob'); call_user_func('sayHi','Jack');
輸出:
Bob say hi
Jack say hi
2. call_user_func用於遞歸函數中
著名的斐波那契函數,如果哪天我們改變了函數名即Factorial,那么該函數會報錯,因為內部也使用到了Factorial。
function Factorial($i=1) { return ($i==1 ? 1 : $i*Factorial($i-1)); }
改進一下:
function FactorialImprove($i=1){ return ($i == 1 ? 1 : $i * call_user_func(__FUNCTION__,$i-1)); }
這樣的話如果外部函數名怎么變都不會出錯。這里用到了PHP中的 __FUNCTION__ 魔法常量。
3. 類似的call_user_func_array
該函數接收兩個參數,第一個參數不變,函數名,第二個是參數數組。
$func = function($arg1, $arg2) { return $arg1 * $arg2; }; var_dump(call_user_func_array($func, array(2, 4)));
其實 call_user_func 函數在事件處理中有起到非常重要的作用。
看下一篇,PHP的事件處理。