温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

PHP中的call_user_func()与call_user_func_array()函数是什么

发布时间:2020-10-30 10:37:54 来源:亿速云 阅读:168 作者:小新 栏目:编程语言

这篇文章给大家分享的是有关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;
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中的call_user_func()与call_user_func_array()函数是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI