php函数call_user_func_arrray、call_user_func、func_get_args、func_num_args的用法

因为刚接触php所以今天在工作用遇到一个函数call_user_func_array,不懂,于是就去搜了一下,本想这只搜这个函数的用法,结果,搜到的不止这个,还有很多函数的用法,外加一个惊喜,因为这些函数的存在,php函数的重载也可以这么利用!!

首先说两个简单的,基础的,后面会例子里面会用到的:func_get_args和func_num_args,从名字看就大概猜的到了。

func_get_args是获取函数的参数列表,是数组类型,这个要注意。

func_num_args是获取函数的参数的个数。

然后就是主要的两个函数了:call_user_func和call_user_func_array,这两个都是动态调用函数时经常用到的。

call_user_func

1、第一种是调用孤独的函数:

function funa($b,$c)
{
echo $b;
echo $c;
}
call_user_func('funa', "111","222");
call_user_func('funa', "333","444");
//显示 111 222 333 444
2、 第二种是调用类内部的函数:
class a {
    function b()
    {
        $args = func_get_args();
        $num = func_num_args();
        print_r($args);
        echo $num;
    }
}
call_user_func(array("a", "b"),"111","222");
这个结果大家应该看的出来的,如果不确定最好自己运行下试试。

call_user_func_array:用法和call_user_func接近,只是参数传入的是数组。

1、同call_user_func一样

function a($b, $c)
{
echo $b;
echo $c;
 
}
call_user_func_array('a', array("aa", "ss"));
//显示 aa ss

2、可以调用类内部函数

Class ClassA
{
 
function bc($b, $c) {
     $bc = $b + $c;
echo $bc;
}
}
call_user_func_array(array('ClassA','bc'), array("1", "2"));
//显示 3
下面是一个更好的例子,实现了函数的重载
function test1($a){
    echo ('一个参数'."\n");
}
function test2($a,$b){
    echo ('两个参数'."\n");
}
function test3($a, $b, $c){
    echo ('三个参数'."\n");
}

function test(){
    $args = func_get_args();
    $num = func_num_args();                                                                                                                                            
    call_user_func_array('test'.$num, $args );
}
test("a");
test("a", "b");
test("a", "b", "c");
这个非常建议大家自己写一下运行看下效果,其中里面的代码写的也很精简,值得学习。


以上就是因为一个函数引来的收获,哈哈

ps:以上例子很内容是由参考别人文章后自己终结点


你可能感兴趣的:(php函数call_user_func_arrray、call_user_func、func_get_args、func_num_args的用法)