Rumah > pembangunan bahagian belakang > tutorial php > php中的回调函数

php中的回调函数

无忌哥哥
Lepaskan: 2023-04-01 21:02:02
asal
8890 orang telah melayarinya

 * 二、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 &#39;<hr>&#39;;
echo call_user_func(function($site){
    return &#39;欢迎来到&#39;.$site;
},&#39;php中文网&#39;);
echo &#39;<hr>&#39;;
Salin selepas log masuk

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

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

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

$obj = new Demo1;
echo call_user_func([$obj,&#39;sum&#39;],10,15);
Salin selepas log masuk

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

echo call_user_func([(new Demo1()),&#39;sum&#39;],10,15);
echo &#39;<hr>&#39;;
Salin selepas log masuk

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

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

echo call_user_func(&#39;Demo2::multi&#39;,10,15);
Salin selepas log masuk

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

echo &#39;<hr>&#39;;
echo call_user_func([&#39;Demo2&#39;,&#39;multi&#39;],20,5);
Salin selepas log masuk

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

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

* 2.call_user_func_array(callback, array)

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

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

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

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

//回调类中的方法

echo call_user_func_array([(new Demo3),&#39;func1&#39;], [&#39;php&#39;,&#39;java&#39;,&#39;c&#39;]);
Salin selepas log masuk

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

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

echo call_user_func_array([&#39;Demo4&#39;,&#39;func2&#39;], [&#39;html&#39;,&#39;css&#39;,&#39;jQuery&#39;]);
Salin selepas log masuk

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

echo call_user_func_array(&#39;Demo4::func2&#39;, [&#39;html&#39;,&#39;css&#39;,&#39;jQuery&#39;]);
Salin selepas log masuk

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

Atas ialah kandungan terperinci php中的回调函数. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan