PHP如何使用Callback/Callable类型

 3442

本篇文章给大家介绍一下PHP使用Callback/Callable类型的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。


PHP如何使用Callback/Callable类型


PHP Callback/Callable 类型使用

测试代码

  1. <?php
  2.  
  3. /**
  4.  * Class ParentCallback
  5.  */
  6. class ParentCallback
  7. {
  8.     /**
  9.      * @param  int  $a
  10.      * @param  int  $b
  11.      * @param  int  $c
  12.      *
  13.      * @return int
  14.      */
  15.     public static function parentSum(int $a, int $b, int $c)
  16.     {
  17.         return $a + $b + $c;
  18.     }
  19.  
  20.     /**
  21.      * @param  int  $a
  22.      * @param  int  $b
  23.      * @param  int  $c
  24.      *
  25.      * @return float|int
  26.      */
  27.     public function parentMultiply(int $a, int $b, int $c)
  28.     {
  29.         return $a * $b * $c;
  30.     }
  31. }
  32.  
  33. /**
  34.  * Class Callback
  35.  */
  36. class Callback extends ParentCallback
  37. {
  38.  
  39.     /**
  40.      * @param  int  $a
  41.      * @param  int  $b
  42.      *
  43.      * @return int
  44.      */
  45.     public static function sum(int $a, int $b)
  46.     {
  47.         return $a + $b;
  48.     }
  49.  
  50.     /**
  51.      * @param  int  $a
  52.      * @param  int  $b
  53.      *
  54.      * @return float|int
  55.      */
  56.     public function multiply(int $a, int $b)
  57.     {
  58.         return $a * $b;
  59.     }
  60. }
  61.  
  62. /**
  63.  * Class Invoke
  64.  */
  65. class Invoke
  66. {
  67.  
  68.     /**
  69.      * @param  int  $a
  70.      * @param  int  $b
  71.      *
  72.      * @return float|int
  73.      */
  74.     public function __invoke(int $a, int $b)
  75.     {
  76.         return $a / $b;
  77.     }
  78. }
  79.  
  80. /**
  81.  * @param  int  $a
  82.  * @param  int  $b
  83.  *
  84.  * @return int
  85.  */
  86. function sum(int $a, int $b)
  87. {
  88.     return $a + $b;
  89. }
  90.  
  91. /**
  92.  * @param $callback
  93.  * @param  mixed  ...$parameter
  94.  *
  95.  * @return mixed
  96.  */
  97. function do_something(callable $callback, ...$parameter)
  98. {
  99.     return call_user_func($callback, ...$parameter);
  100. }


测试示例

  1. // 闭包
  2. $ret = do_something(function ($a, $b){
  3.     return $a - $b;
  4. }, 5, 6);
  5. printf("闭包测试示例: %s\n", $ret);
  6.  
  7. // 函数
  8. $ret = do_something('sum', 5, 6);
  9. printf("函数测试示例: %s\n", $ret);
  10.  
  11. // 静态方法
  12. $ret = do_something([Callback::class, 'sum'], 5, 6);
  13. printf("静态方法示例: %s\n", $ret);
  14.  
  15. $ret = do_something('\Callback::sum', 5, 6);
  16. printf("静态方法示例: %s\n", $ret);
  17.  
  18. $ret = do_something([Callback::class, 'self::parentSum'], 5, 6, 7);
  19. printf("静态方法示例: %s\n", $ret);
  20.  
  21. $ret = do_something([Callback::class, 'parentSum'], 5, 6, 7);
  22. printf("静态方法示例: %s\n", $ret);
  23.  
  24. $ret = do_something([Callback::class, 'parent::parentSum'], 5, 6, 7);
  25. printf("静态方法示例: %s\n", $ret);
  26.  
  27. // 方法
  28. $callback = new Callback;
  29. $ret = do_something([$callback, 'multiply'], 5, 6);
  30. printf("普通方法示例: %s\n", $ret);
  31.  
  32. // invoke
  33. $invoke = new Invoke;
  34. $ret = do_something($invoke, 5, 6);
  35. printf("对象 invoke 示例: %s\n", $ret);


测试结果

  1. 闭包测试示例: -1
  2. 函数测试示例: 11
  3. 静态方法示例: 11
  4. 静态方法示例: 11
  5. 静态方法示例: 18
  6. 静态方法示例: 18
  7. 静态方法示例: 18
  8. 普通方法示例: 30
  9. 对象 invoke 示例: 0.83333333333333


TAG标签:
本文网址:https://www.zztuku.com/index.php/detail-8907.html
站长图库 - PHP如何使用Callback/Callable类型
申明:如有侵犯,请 联系我们 删除。

评论(0)条

您还没有登录,请 登录 后发表评论!

提示:请勿发布广告垃圾评论,否则封号处理!!

    编辑推荐

    搜索引擎优化的文章营销策略