本篇文章主要是對(duì)PHP中的call_user_func()與call_user_func_array()函數(shù)的作用以及使用方法做簡(jiǎn)要說明,感興趣的朋友來學(xué)習(xí)一下吧。
call_user_func:把一個(gè)參數(shù)作為回調(diào)函數(shù)調(diào)用
用法說明:
call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] ) : mixed
參數(shù)說明:
第一個(gè)參數(shù)$callback作為回調(diào)函數(shù),其它參數(shù)都是回調(diào)函數(shù)的參數(shù)。
$parameter:傳入回調(diào)$callback函數(shù)的參數(shù),這里的參數(shù)注意不能引用傳遞。
下面簡(jiǎn)單例子分別說明了在不同情況下使用call_user_func:
- //先引用,后執(zhí)行
- function _call($call){
- echo $call++.'<br/>';
- echo $call++.'<br/>';
- return $call;
- }
- $rs = call_user_func('_call',1);
- var_dump($rs);
- //結(jié)果
- //1
- //2
- //int(3)
先執(zhí)行,后引用
- $arg = 1;
- call_user_func(function ($call){
- echo ++$call.'<br/>';
- echo ++$call.'<br/>';
- },$arg);
- //結(jié)果為2,3
回調(diào)函數(shù)不傳值,通過func_get_arg和func_get_args獲取參數(shù)
- $argOne = 1;
- $argTwo = 2;
- call_user_func(function (){
- //獲取第幾個(gè)參數(shù)
- $arg = func_get_arg(0);
- var_dump($arg);
- echo '<br/>';
- //獲取所有的參數(shù),并以數(shù)組的形式返回
- $args = func_get_args();
- var_dump($args);
- //獲取參數(shù)個(gè)數(shù)
- $argNum = func_num_args();
- echo "<br/>";
- var_dump($argNum);
- },$argOne,$argTwo);
- //結(jié)果為
- int(1)
- array(2) { [0]=> int(1) [1]=> int(2) }
- int(2)
調(diào)用類方法:
調(diào)用類中的靜態(tài)方法有兩種形式,而調(diào)用public方法第一個(gè)參數(shù)只能為數(shù)組
- class Func{
- static public function _One(){
- $str = "THE CLASS NAME IS".__CLASS__." AND CLASS STATIC METHOD IS ".__METHOD__;
- $argNum = func_num_args();
- if($argNum){
- $arg = func_get_arg(0);
- return $str.' and argument is '.$arg;
- }else{
- return $str;
- }
- }
- public function _Two($num){
- return $num ? $num + 1 : $num;
- }
- }
- echo "<br/>";
- //調(diào)用類的靜態(tài)方法
- var_dump(call_user_func('Func::_One','one'));
- echo '<br/>';
- var_dump(call_user_func(['Func','_One']));
- $num = 4;
- $o = new Func;
- //調(diào)用類普通方法
- //Vevb.com
- $return = call_user_func(array($o,'_Two'),$num);
- echo '<br/>';
- var_dump($return);
結(jié)果:
string(79) "THE CLASS NAME ISFunc AND CLASS STATIC METHOD IS Func::_One and argument is one"
string(59) "THE CLASS NAME ISFunc AND CLASS STATIC METHOD IS Func::_One"
int(5)
調(diào)用有命名空間的類時(shí)call_user_func的用法與上面的同理
- //調(diào)用靜態(tài)方法
- call_user_func(array(__NAMESPACE__.'/StaticDemo','_One'),100);
- call_user_func('App/StaticDemo::_One',200);
- //調(diào)用public方法
- call_user_func(array($obj,'_Two'),2,3,4);
最后:和call_user_func函數(shù)類似的還有call_user_func_array,call_user_func_array的作用和call_user_func的作用一樣,不同的是call_user_func用回調(diào)函數(shù)處理字符,而call_user_func_array用回調(diào)處理數(shù)組,也就是說call_user_func_array的參數(shù)二只能為數(shù)組。
|
新聞熱點(diǎn)
疑難解答