首頁  >  文章  >  後端開發  >  淺談PHP中的call_user_func()與call_user_func_array()函數

淺談PHP中的call_user_func()與call_user_func_array()函數

little bottle
little bottle轉載
2019-04-18 11:31:414037瀏覽
這篇文章主要是對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++.&#39;<br/>&#39;;
    echo $call++.&#39;<br/>&#39;;
    return $call;
}
$rs = call_user_func(&#39;_call&#39;,1);
var_dump($rs);

//结果
//1
//2
//int(3)

先執行,後引用


$arg = 1;
call_user_func(function ($call){
    echo ++$call.&#39;<br/>&#39;;
    echo ++$call.&#39;<br/>&#39;;
},$arg);

//结果为2,3

回呼函數不傳值,透過func_get_arg和func_get_args取得參數


$argOne = 1;
$argTwo = 2;
call_user_func(function (){
    //获取第几个参数
    $arg = func_get_arg(0);
    var_dump($arg);
    echo &#39;<br/>&#39;;
    //获取所有的参数,并以数组的形式返回
    $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.&#39; and argument is &#39;.$arg;
        }else{
            return $str;
        }
    }


    public function _Two($num){
        return $num ? $num + 1 : $num;
    }

}

echo "<br/>";
//调用类的静态方法
var_dump(call_user_func(&#39;Func::_One&#39;,&#39;one&#39;));
echo &#39;<br/>&#39;;
var_dump(call_user_func([&#39;Func&#39;,&#39;_One&#39;]));

$num = 4;
$o = new Func;
//调用类普通方法
$return = call_user_func(array($o,&#39;_Two&#39;),$num);
echo &#39;<br/>&#39;;
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__.&#39;\StaticDemo&#39;,&#39;_One&#39;),100);
call_user_func(&#39;App\StaticDemo::_One&#39;,200);
//调用public方法
call_user_func(array($obj,&#39;_Two&#39;),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影片教學#

以上是淺談PHP中的call_user_func()與call_user_func_array()函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除