php中的回调函数
Jun 28, 2018 pm 02:49 PM* 二、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__即可
Atas ialah kandungan terperinci php中的回调函数. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Bagaimana untuk mengoptimumkan kesan pemuatan malas imej melalui fungsi php?

Bagaimana untuk menulis fungsi panggil balik java

Sintaks asas dan aplikasi fungsi panggil balik dalam Java

Bagaimana untuk mengurangkan penggunaan memori melalui fungsi php?

Pengenalan kepada fungsi PHP: fungsi strtr().

Persamaan dan perbezaan antara fungsi PHP dan fungsi Flutter

Membandingkan fungsi PHP dengan fungsi dalam bahasa lain

Ringkasan kaedah untuk melaksanakan fungsi penyuntingan dan pemprosesan imej menggunakan fungsi pemprosesan imej PHP
