• 技术文章 >后端开发 >php教程

    php中的回调函数

    无忌哥哥无忌哥哥2018-06-28 14:49:15原创4647
    * 二、2个执行回调的函数

    * 提示:什么是回调?

    * 我们调用php系统提供的函数叫直接调用,也叫: 直调

    * php系统调用用户自定义的函数,必须要通过一个代理函数来调用,叫间接调用,也叫回调

    * 我们今天学习的call_user_func()和call_user_func_array()就是这样的代理函数

    * 可以代替系统来调用我们自定义的函数

    * 1.call_user_func_array($callback, $array):使用数组参数执行回调函数

    * 2.call_user_func($callback, $array):第一个参数作为回调函数调用

    * 注意: 1.回调中通常不需要写参数,而是通过其它函数来获取;2.参数不允许使用引用传递

    //1.参数逐个传入使用:call_user_func()

    //单个参数

    echo call_user_func(function(){
        //如果匿名回调没写参数,可以通过func_get_args()获取
        return '欢迎来到'.func_get_arg(0);
    },'php中文网');
    echo '<hr>';
    echo call_user_func(function($site){
        return '欢迎来到'.$site;
    },'php中文网');
    echo '<hr>';

    //多个参数,实参数量与回调参数数量必须一致,多余会被忽略

    echo call_user_func(function($site,$course){
        return '欢迎来到'.$site.'学习'.$course.'课程';
    },'php中文网','php');
    echo '<hr>';
    //支持调用类中的方法做为回调
    class Demo1
    {
        //普通方法
        public function sum($a, $b)
        {
            return $a+$b;
        }
    }
    class Demo2
    {
        //静态方法
        public static function multi($a,$b)
        {
            return $a*$b;
        }
    }

    //调用普通方法:回调必须以数组方式传入: [对象,'方法名']

    $obj = new Demo1;
    echo call_user_func([$obj,'sum'],10,15);

    //php5.4+以上,可以简写:

    echo call_user_func([(new Demo1()),'sum'],10,15);
    echo '<hr>';

    //调用静态方法:有字符串和数组二种方式

    //字符串: '类名::方法名'

    echo call_user_func('Demo2::multi',10,15);

    //数组: [类名,'方法名']

    echo '<hr>';
    echo call_user_func(['Demo2','multi'],20,5);

    //如果有命名空间,只要在类名前加上命名空间字符串就可以了,或者用常量__NAMESPACE__

    //理解了call_user_func()那么call_user_func_array()就非常简单了,仅仅是参数不同

    * 2.call_user_func_array(callback, array)

    * 只接受二个参数:回调,索引数组,传给回调的参数全部打包到索引数组中

    * 与call_user_func(array,arg1...)不同之处仅仅传递参数方式不同

    * 回调同样支持:字符串函数名,类名,数组,匿名函数

    echo '<hr>';
    echo call_user_func_array(function(){
        //查看传递给回调的参数
    //    return print_r(func_get_args(),true);
        
        $msg = '前端开发的基础知识包括:';
        //遍历参数数组
        foreach (func_get_args() as $value) {
            $msg .= $value.',';
        }
        //去掉未尾逗号,并替换成感叹号
        return rtrim($msg,',').'!';
        
    }, ['html','css','javascript']);
    echo '<hr>';
    class Demo3
    {
        public function func1()
        {
            return __METHOD__.'<pre>'.print_r(func_get_args(),true).'</pre>';
        }
    }
    class Demo4 
    {
        public static function func2()
        {
            return __METHOD__.'<pre>'.print_r(func_get_args(),true).'</pre>';
        }
    }

    //回调类中的方法

    echo call_user_func_array([(new Demo3),'func1'], ['php','java','c']);

    //调用静态方法的回调:

    //1.使用数组参数方式

    echo call_user_func_array(['Demo4','func2'], ['html','css','jQuery']);

    //2.使用字符串参数方式

    echo call_user_func_array('Demo4::func2', ['html','css','jQuery']);

    //如果有命名空间,只需要在类名前加上命名空间或__NAMESPACE__即可

    以上就是php中的回调函数的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    上一篇:php中函数处理函数 下一篇:php中的eval()与create_function()
    大前端线上培训班

    相关文章推荐

    • PHP中怎样完成Session的设置、获取和删除?• PHP中怎样完成Cookie的创建、读取和删除?• 带你分清类中的构造函数与析构函数• PHP中的命名空间定义与使用(实例详解)• PHP中clone关键字和__clone()方法的使用(实例详解)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网