在PHP中,回调是一个具有类型callable的函数对象/引用。回调/callable变量可以充当函数、对象方法和静态类方法。有几种实现回调的方法,其中一些在下面讨论:
标准回调:在PHP中,可以使用call_user_func()函数调用函数,其中参数是要调用的函数的字符串名称。
示例:
<?php
// PHP program to illustrate working
// of a standard callback
// Function to print a string
function someFunction() {
echo "Goodsforgoods \n";
}
// Standard callback
call_user_func('someFunction');
?>
静态类方法回调:可以通过使用call_user_func()来调用静态类方法,其中参数是一个包含要调用的类和方法的字符串名称的数组。
示例:
<?php
// PHP program to illustrate working
// of a Static class method callback
// Sample class
class GFG {
// Function used to print a string
static function someFunction() {
echo "Parent Goodsforgoods \n";
}
}
class Article extends GFG {
// Function to print a string
static function someFunction() {
echo "Goodsforgoods Article \n";
}
}
// Static class method callback
call_user_func(array('Article', 'someFunction'));
call_user_func('Article::someFunction');
// Relative Static class method callback
call_user_func(array('Article', 'parent::someFunction'));
?>
output:
Goodsforgoods Article
Goodsforgoods Article
Parent Goodsforgoods
对象方法回调:可以使用call_user_func()调用对象方法,其中参数是一个包含要调用的对象变量和方法名称的数组。如果对象方法使用__invoke()函数定义,则也可以调用它们。在这种情况下,call_user_func()函数的参数是对象变量本身。
示例:
<?php
// PHP program to illustrate working
// of a object method callback
// Sample class
class GFG {
// Function to print a string
static function someFunction() {
echo "Goodsforgoods \n";
}
// Function used to print a string
public function __invoke() {
echo "invoke Goodsforgoods \n";
}
}
// Class object
$obj = new GFG();
// Object method call
call_user_func(array($obj, 'someFunction'));
// Callable __invoke method object
call_user_func($obj);
?>
output
Goodsforgoods
invoke Goodsforgoods
闭包回调:可以通过使用标准调用或映射闭包函数到给定闭包函数的合法参数数组来使闭包函数可调用,其中参数是闭包函数和其合法参数的数组。可以使用array_map()函数将闭包函数映射到给定闭包函数的合法参数数组。
<?php
// PHP program to illustrate working
// of a closure callback
// Closure to print a string
$print_function = function($string) {
echo $string."\n";
};
// Array of strings
$string_array = array("Goodsforgoods", "GFG", "Article");
// Callable closure
array_map($print_function, $string_array);
?>
output:
Goodsforgoods
GFG
Article