A-A+

PHP中如何实现回调?

2020年02月03日 我爱编程 暂无评论

在PHP中,回调是一个可调用类型的函数对象/引用;回调(或可调用)变量可以用作函数、对象方法和静态类方法。实现回调有多种方法,下面本篇文章就来介绍一些,希望对大家有所帮助。

1、标准回调

示例:使用call_user_func()函数调用一个函数,其中包含的参数是函数名称。

  1. <?php
  2. header("content-type:text/html;charset=utf-8");
  3. function text1(){
  4.     echo '这个是text1<br>';
  5. };
  6. call_user_func('text1');
  7. ?>

输出:

这个是text1

说明:调用了一个call_user_func()函数,然后call_user_func()函数在执行过程中又往回调用了 text1()函数。

2、静态类方法回调

示例:使用call_user_func()函数调用静态类方法,其中的参数是一个包含类名称和要调用的方法的数组。

  1. <?php
  2. header("content-type:text/html;charset=utf-8");
  3. class Demo {
  4.     // 用于输出字符串的函数
  5.     static function someFunction() {
  6.         echo "父级函数输出 <br>";
  7.     }
  8. }
  9. class Article extends Demo {
  10.     // 用于输出字符串的函数 
  11.     static function someFunction() {
  12.         echo "子级函数输出 <br>";
  13.     }
  14. }
  15. // 静态类方法回调
  16. call_user_func(array('Article''someFunction'));
  17. call_user_func('Article::someFunction');
  18. // 相对静态类方法回调
  19. call_user_func(array('Article''parent::someFunction'));
  20. ?>

输出:

子级函数输出

子级函数输出

父级函数输出

3、对象方法回调

示例:使用call_user_func()函数调用对象方法,其中参数是包含对象变量和要调用方法的字符串名称的数组。

  1. <?php
  2. header("content-type:text/html;charset=utf-8");
  3. class Demo {
  4.     // 输出字符串的函数
  5.     static function someFunction() {
  6.         echo "PHP中文网 <br>";
  7.     }
  8.     // 输出字符串的函数
  9.     public function __invoke() {
  10.         echo "__invoke()函数<br>";
  11.     }
  12. }
  13. // 类对象
  14. $obj = new Demo();
  15. // 对象方法调用
  16. call_user_func(array($obj'someFunction'));
  17. call_user_func($obj);
  18. ?>

输出:

PHP中文网

__invoke()函数

4、闭包回调

示例:使用array_map()函数对闭包函数赋予的有效参数数组进行标准调用或映射闭包函数,可以使闭包函数可调用,其中参数是闭包函数及其有效参数的数组。

  1. <?php
  2. header("content-type:text/html;charset=utf-8");
  3. // 用于输出<br>
  4. $print_function = function($string) {
  5.     echo $string."<br>";
  6. };
  7. // 字符串数组 
  8. $string_array = array("PHP""Python""MySQL");
  9. // 可调用闭包
  10. array_map($print_function$string_array);
  11. ?>

输出:

PHP

Python

MySQL

以上就是本篇文章的全部内容,希望能对大家的学习有所帮助。

给我留言

Copyright © 四季博客 保留所有权利.   Theme  Ality

用户登录