PHP的数据类型有:Boolean布尔类型、Integer整型、Float浮点型、String字符型、Array数组、Object对象、Resource资源类型、NULL、Callback/Callable类型。本文主要针对Callback/Callable类型
自 PHP 5.4 起可用 callable 类型指定回调类型 callback。一些函数如 call_user_func() 或 usort() 可以接受用户自定义的回调函数作为参数。回调函数不止可以是简单函数,还可以是对象的方法,包括静态类方法。
传递
1.PHP是将函数以string形式传递的。
可以使用任何内置或用户自定义函数,但除了语言结构例如:array(),echo,empty(),eval(),exit(),isset(),list(),print 或 unset()。
function test(){
echo '你好';
}
function test2($call){
$call();
}
test2('test');//你好
2. 一个已实例化的 object 的方法被作为 array 传递,下标 0 包含该 object,下标 1 包含方法名。
在同一个类里可以访问 protected 和 private 方法。
class Test{
public function show($str){
echo $str;
}
public function index(){
call_user_func(array($this, 'show'),'111');
}
}
$a = new Test();
$a->index();//111
3. 静态类方法也可不经实例化该类的对象而传递,只要在下标 0 中包含类名而不是对象。
自 PHP 5.2.3 起,也可以传递 'ClassName::methodName'。
class Test{
public static function show($str){
echo $str;
}
public static function index(){
call_user_func(array('Test', 'show'),'111');
}
}
Test::index();//111
除了普通的用户自定义函数外,也可传递 匿名函数 给回调参数。