• 回调函数
    • 回调函数的几种写法
      • 函数字符串:
      • 匿名函数
    • 类静态方法
    • 类方法

    回调函数

    回调函数就是在主进程执行当中,突然跳转到预先设置好的函数中去执行的函数.

    1. 以下是自知乎作者常溪玲的解说:
    2. 你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。

    以下是一个非常简单的回调函数的例子:

    1. <?php
    2. //登记回调函数
    3. function insert(int $i):bool {
    4. echo "插入数据{$i}\n";//模拟数据库插入//响应回调事件
    5. return true;
    6. }
    7. $arr = range(0,1000);//模拟生成1001条数据
    8. function action(array $arr, callable $function)
    9. {
    10. foreach ($arr as $value) {
    11. if ($value % 10 == 0) {//当满足条件时,去执行回调函数处理//触发回调
    12. call_user_func($function, $value);//调用回调事件
    13. }
    14. }
    15. }
    16. action($arr,'insert');

    在这个例子中,首先定义了一个插入数据的函数,定义了一个1001条数据的数组
    然后调用了action函数,当遍历数组满足条件时,则执行设定好的回调函数进行插入数据

    回调函数的几种写法

    函数字符串:

    1. <?php
    2. function insert(int $i):bool {
    3. echo "插入数据{$i}\n";//模拟数据库插入
    4. return true;
    5. }
    6. $arr = range(0,1000);//模拟生成1001条数据
    7. function action(array $arr, callable $function)
    8. {
    9. foreach ($arr as $value) {
    10. if ($value % 10 == 0) {//当满足条件时,去执行回调函数处理
    11. call_user_func($function, $value);
    12. }
    13. }
    14. }
    15. action($arr,'insert');

    匿名函数

    1. <?php
    2. $arr = range(0,1000);//模拟生成1001条数据
    3. function action(array $arr, callable $function)
    4. {
    5. foreach ($arr as $value) {
    6. if ($value % 10 == 0) {//当满足条件时,去执行回调函数处理
    7. call_user_func($function, $value);
    8. }
    9. }
    10. }
    11. action($arr,function($i){
    12. echo "插入数据{$i}\n";//模拟数据库插入
    13. return true;
    14. });

    类静态方法

    1. <?php
    2. $arr = range(0, 1000);//模拟生成1001条数据
    3. function action(array $arr, callable $function)
    4. {
    5. foreach ($arr as $value) {
    6. if ($value % 10 == 0) {//当满足条件时,去执行回调函数处理
    7. call_user_func($function, $value);
    8. }
    9. }
    10. }
    11. class A{
    12. static function insert(int $i):bool {
    13. echo "插入数据{$i}\n";//模拟数据库插入
    14. return true;
    15. }
    16. }
    17. action($arr,'A::insert');
    18. action($arr,array('A','insert'));

    类方法

    1. <?php
    2. $arr = range(0, 1000);//模拟生成1001条数据
    3. function action(array $arr, callable $function)
    4. {
    5. foreach ($arr as $value) {
    6. if ($value % 10 == 0) {//当满足条件时,去执行回调函数处理
    7. call_user_func($function, $value);
    8. }
    9. }
    10. }
    11. class A{
    12. public function insert(int $i):bool {
    13. echo "插入数据{$i}\n";//模拟数据库插入
    14. return true;
    15. }
    16. }
    17. $a = new A();
    18. action($arr,array($a,'insert'));