可调用(callable
)类型表示回调函数。
1.回调函数声明
回调函数声明无需特殊的语法。
回调函数支持 普通函数、匿名函数、箭头函数、静态方法、实例方法、任何实现了 __invoke()
方法的类的对象。
2.传递回调函数
//第一个参数为回调函数
//第二个参数为传递给回调函数的0个或多个参数
//返回值为回调函数的返回值
call_user_func(callable $callback, mixed ...$args): mixed
传递方式 | 语法 |
字符串 | '' |
数组 | array() 或 [] |
变量 | $变量名 |
回调函数 | 传递方式(注意:函数名或方法名后无圆括号) |
普通函数 | call_user_func('函数名' )call_user_func( $变量名 ) |
匿名函数 | call_user_func(function (形参) { 函数体 } )call_user_func( $变量名 ) |
箭头函数 | call_user_func(fn (形参) => 表达式 )call_user_func( $变量名 ) |
静态方法 | call_user_func('类名::静态方法名' )call_user_func( array('类名', '静态方法名') )call_user_func( array($对象名, '静态方法名') )call_user_func( $变量名 ) |
实例方法 | '$对象名->实例方法名' )(不支持此语法)array($对象名, '实例方法名') )call_user_func( $变量名 ) |
任何实现了 __invoke() 方法的类的对象 | call_user_func($对象名 ) |
//普通函数作为回调函数
function my_callback_function() {
echo 'hello world!';
}
call_user_func('my_callback_function');
//匿名函数和箭头函数作为回调函数
$numbers = range(1, 5);
$new_numbers1 = array_map(function($a) { return $a * 2; }, $numbers);
$new_numbers2 = array_map(fn($a) => $a*2, $numbers);
print implode(' ', $new_numbers1);
print implode(' ', $new_numbers2);
//输出
2 4 6 8 10
2 4 6 8 10
class MyClass {
//静态方法
static function myCallbackMethod() {
echo 'Hello World!';
}
//实例方法
function myCallbackMethod2() {
echo 'Hello World!2';
}
//__invoke()方法
public function __invoke($name) {
echo 'Hello ', $name, "\n";
}
}
//静态方法作为回调函数(字符串方式)
call_user_func('MyClass::myCallbackMethod');
//静态方法作为回调函数(array()类方式)
call_user_func(array('MyClass', 'myCallbackMethod'));
//静态方法作为回调函数(array()对象方式)
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));
//实例方法作为回调函数
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod2'));
//实现了__invoke()方法的类的对象作为回调函数
$obj = new MyClass();
call_user_func($obj, 'PHP!');
原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/php/phplang/28899.html