call_user_func函數和call_user_func_array函數(PHP)

call_user_func函數和call_user_func_array函數(PHP)#

最近在波哥手中寫一個php的框架。
call_user_func這個函數查了查手冊還是不是太明白,就在網上搜了搜,找到了一篇參考文章終于解了疑惑:

今天偶然的情況下在CodeIgniter的官方文檔中再次看到了php中的call_user_func_array()這個函數,去年也在discuz論壇的代碼中也有遇到過,但是當時不知道怎么回事,在網上沒有找到相應的說明,所以也一直都沒弄明白這個函數有什么用處。呵呵~~很幸運的是,今天在網上搜索到了這個函數的用法(PS:雖然php手冊中有關于這個函數的介紹,但是看了介紹還是不明白,也不知道是我的理解能力不行還是文檔說明的太模糊了,不信你自己去看看:http://cn2.php.net/call_user_func_array
下面來和大家分享一下這個call_user_func_arraycall_user_func函數的用法,另外附贈func_get_args()函數和func_num_args()函數,嘿嘿!!

call_user_func函數是當需要動態(tài)調用函數時,才使用的,這個函數有兩種用法:
第一種是調用孤獨的函數:

<?php
function funa($b,$c) 
{
echo $b;
echo $c;
}
call_user_func('funa', "111","222");
call_user_func('funa', "333","444");
//顯示 111 222 333 444
//大家有沒有發(fā)現,這個用法有點像javascript中的call方法,嘿嘿

第二種是調用類內部的函數:

<?php
class a{
    function b()
    {
//func_get_args — 返回一個包含函數參數列表的數組
//func_num_args - 獲取傳入函數中的參數的個數。
    $args = func_get_args();
        $num = func_num_args();
        echo "<pre>";
        var_dump($args);
        var_dump($num); 
    }
}
call_user_func(array(new a(), "b"),"111","222","OSONG");

注意一下:array()里的第一個參數是實例化的一個

上面這個例子,自己運行一下看看結果是什么吧嘿嘿提示一下func_get_args()函數是獲取傳入到函數中的參數,返回一個數組,func_num_args()函數獲取傳入函數中的參數的個數。

下面再來看看
call_user_func_array函數
這個函數也是當需要動態(tài)調用函數時用到的,它的用法和call_user_func函數比較像,只是參數傳入的是數組。

<?php
function a($b, $c) 
{
echo $b;
echo $c;
 
}
call_user_func_array('a', array("111", "222"));
//顯示 111 222

call_user_func_array函數也可以調用類內部的方法的

<?php
class ClassA
{
 
function bc($b, $c) {
     $bc = $b + $c;
echo $bc;
}
}
call_user_func_array(array('ClassA','bc'), array("111", "222"));
//顯示 333

下面再看一個動態(tài)調用函數的例子:是從網上找來的:

function otest1 ($a)
{
     echo( '一個參數' );
}
 
function otest2 ( $a, $b)
{
    echo( '二個參數' );
}
 
function otest3 ( $a ,$b,$c)
{
    echo( '三個啦' );
}
 
function otest (){
    $args = func_get_args();
    $num = func_num_args();
    call_user_func_array( 'otest'.$num, $args  );
}
otest("11");
otest("11","22");
otest("11","22","33");

呵呵~上面這個例子,還是你們自己運行一下,那樣印象更加深刻

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容