当前位置:  首页>> 技术小册>> PHP合辑2-高级进阶

在PHP中,回调是一个具有类型callable的函数对象/引用。回调/callable变量可以充当函数、对象方法和静态类方法。有几种实现回调的方法,其中一些在下面讨论:

标准回调:在PHP中,可以使用call_user_func()函数调用函数,其中参数是要调用的函数的字符串名称。

示例:

  1. <?php
  2. // PHP program to illustrate working
  3. // of a standard callback
  4. // Function to print a string
  5. function someFunction() {
  6. echo "Goodsforgoods \n";
  7. }
  8. // Standard callback
  9. call_user_func('someFunction');
  10. ?>

静态类方法回调:可以通过使用call_user_func()来调用静态类方法,其中参数是一个包含要调用的类和方法的字符串名称的数组。

示例:

  1. <?php
  2. // PHP program to illustrate working
  3. // of a Static class method callback
  4. // Sample class
  5. class GFG {
  6. // Function used to print a string
  7. static function someFunction() {
  8. echo "Parent Goodsforgoods \n";
  9. }
  10. }
  11. class Article extends GFG {
  12. // Function to print a string
  13. static function someFunction() {
  14. echo "Goodsforgoods Article \n";
  15. }
  16. }
  17. // Static class method callback
  18. call_user_func(array('Article', 'someFunction'));
  19. call_user_func('Article::someFunction');
  20. // Relative Static class method callback
  21. call_user_func(array('Article', 'parent::someFunction'));
  22. ?>

output:

  1. Goodsforgoods Article
  2. Goodsforgoods Article
  3. Parent Goodsforgoods

对象方法回调:可以使用call_user_func()调用对象方法,其中参数是一个包含要调用的对象变量和方法名称的数组。如果对象方法使用__invoke()函数定义,则也可以调用它们。在这种情况下,call_user_func()函数的参数是对象变量本身。

示例:

  1. <?php
  2. // PHP program to illustrate working
  3. // of a object method callback
  4. // Sample class
  5. class GFG {
  6. // Function to print a string
  7. static function someFunction() {
  8. echo "Goodsforgoods \n";
  9. }
  10. // Function used to print a string
  11. public function __invoke() {
  12. echo "invoke Goodsforgoods \n";
  13. }
  14. }
  15. // Class object
  16. $obj = new GFG();
  17. // Object method call
  18. call_user_func(array($obj, 'someFunction'));
  19. // Callable __invoke method object
  20. call_user_func($obj);
  21. ?>

output

  1. Goodsforgoods
  2. invoke Goodsforgoods

闭包回调:可以通过使用标准调用或映射闭包函数到给定闭包函数的合法参数数组来使闭包函数可调用,其中参数是闭包函数和其合法参数的数组。可以使用array_map()函数将闭包函数映射到给定闭包函数的合法参数数组。

  1. <?php
  2. // PHP program to illustrate working
  3. // of a closure callback
  4. // Closure to print a string
  5. $print_function = function($string) {
  6. echo $string."\n";
  7. };
  8. // Array of strings
  9. $string_array = array("Goodsforgoods", "GFG", "Article");
  10. // Callable closure
  11. array_map($print_function, $string_array);
  12. ?>

output:

  1. Goodsforgoods
  2. GFG
  3. Article