php中call_user_func()與call_user_func_array()區別

call_user_func:把一個參數做爲回調函數調用
用法說明:
call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] ) : mixed
參數說明:
第一個參數$callback做爲回調函數,其它參數都是回調函數的參數。
$parameter:傳入回調$callback函數的參數,這裏的參數注意不能引用傳遞。
下面簡單例子分別說明了在不一樣狀況下使用call_user_func:
//先引用,後執行
function _call($call){
    echo $call++.'<br/>';
    echo $call++.'<br/>';
    return $call;
}
$rs = call_user_func('_call',1);
var_dump($rs);
 
//結果
//1
//2
//int(3)
先執行,後引用
$arg = 1;
call_user_func(function ($call){
    echo ++$call.'<br/>';
    echo ++$call.'<br/>';
},$arg);
 
//結果爲2,3
回調函數不傳值,經過func_get_arg和func_get_args獲取參數
$argOne = 1;
$argTwo = 2;10
call_user_func(function (){
    //獲取第幾個參數
    $arg = func_get_arg(0);
    var_dump($arg);
    echo '<br/>';
    //獲取全部的參數,並以數組的形式返回
    $args = func_get_args();
    var_dump($args);
    //獲取參數個數
    $argNum = func_num_args();
    echo "<br/>";
    var_dump($argNum);
},$argOne,$argTwo);
 
//結果爲
int(1)
array(2) { [0]=> int(1) [1]=> int(2) }
int(2)
調用類方法:
調用類中的靜態方法有兩種形式,而調用public方法第一個參數只能爲數組
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/>";
//調用類的靜態方法
var_dump(call_user_func('Func::_One','one'));
echo '<br/>';
var_dump(call_user_func(['Func','_One']));
 
$num = 4;
$o = new Func;
//調用類普通方法
$return = call_user_func(array($o,'_Two'),$num);
echo '<br/>';
var_dump($return);
 
結果:
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)
調用有命名空間的類時call_user_func的用法與上面的同理
//調用靜態方法
call_user_func(array(__NAMESPACE__.'\StaticDemo','_One'),100);
call_user_func('App\StaticDemo::_One',200);
//調用public方法
call_user_func(array($obj,'_Two'),2,3,4);
最後:
和call_user_func函數相似的還有call_user_func_array,call_user_func_array的做用和call_user_func的做用同樣,
不一樣的是call_user_func用回調函數處理字符,而call_user_func_array用回調處理數組,也就是說call_user_func_array的參數二隻能爲數組。
————————————————————————————————————————————
引自PHP技術大全
相關文章
相關標籤/搜索