www.adminn.cn
站长正能量分享网!

PHP回调函数及匿名函数概念与用法详解

AD:阿里云服务器企业会员更优惠 腾讯云香港,韩国免备案服务器1.8折优惠

这篇文章主要介绍了PHP回调函数及匿名函数概念与用法,结合实例形式详细分析了PHP回调函数及匿名函数的概念、功能、使用方法及相关操作注意事项,需要的朋友可以参考下。

本文实例讲述了PHP回调函数及匿名函数概念与用法。分享给大家供大家参考,具体如下:

1、回调函数

PHP的回调函数其实和C、Java等语言的回调函数的作用是一模一样的,都是在主线程执行的过程中,突然跳去执行设置的回调函数;

回调函数执行完毕之后,再回到主线程处理接下来的流程

而在php调用回调函数,不想c以及java那样直接使用函数名作为函数参数,而是在php中使用函数对应的字符串名称执行

1.1、无参数回调

  1. <?php 
  2. //无参数回调 
  3. function callback(){ 
  4.   echo 'execute no parameters callback.<br/>'
  5. function main($callback){ 
  6.   echo 'execute main start.<br/>'
  7.   $callback(); 
  8.   echo 'execute main end.<br/>'
  9. main('callback'); 
  10. //结果 
  11. ecute main start. 
  12. execute no parameters callback. 
  13. execute main end

1.2、全局回调函数

  1. <?php 
  2. //全局函数回调 
  3. function callback($a,$b){ 
  4.   echo "$a<====>$b.<br/>"
  5. $func = 'callback'
  6. call_user_func($func, 1,2); 
  7. call_user_func_array($funcarray(1,2)); 
  8. //结果 
  9. 1<====>2. 
  10. 1<====>2. 

1.3、类方法及静态方法回调

  1. <?php 
  2. class Test{ 
  3.   //成员函数 
  4.   function callback($a,$b){ 
  5.     echo "callback $a<====>$b.<br/>"
  6.   } 
  7.   public static function staticCallback($a,$b){ 
  8.     echo "staticCallback $a<====>$b.<br/>"
  9.   } 
  10. //非静态方法调用方式一 
  11. $test = new Test(); 
  12. call_user_func(array($test'callback'), 1,2); 
  13. call_user_func_array(array($test'callback'), array(1,2)); 
  14. //非静态方法调用方式二 
  15. $func = 'callback'
  16. $test->$func(7,9); 
  17. //静态方法调用方式 
  18. call_user_func(array('Test''staticCallback'), 4,6); 
  19. call_user_func_array(array('Test''staticCallback'), array(4,6)); 
  20. call_user_func_array("Test::staticCallback"array(4,6)); 
  21. //结果 
  22. callback 1<====>2. 
  23. callback 1<====>2. 
  24. callback 7<====>9. 
  25. staticCallback 4<====>6. 
  26. staticCallback 4<====>6. 
  27. staticCallback 4<====>6. 

2、匿名函数

2.1、php中的匿名函数(Anonymous functions), 也叫闭包函数(closures), 允许指定一个没有名称的函数。最常用的就是回调函数的参数值

  1. <?php 
  2. $closureFunc = function($str){ 
  3.   echo $str.'<br/>'
  4. }; 
  5. $closureFunc("hello world!"); 
  6. //结果 
  7. hello world! 

2.2、闭包

2.2.1、传入参数,引用局部变量

  1. <?php 
  2. $closureFunc = function($name){ 
  3.   $sex = '男'
  4.   $func = function($age)use ($name,$sex){ 
  5.     echo "$name–$sex–$age<br/>"
  6.   }; 
  7.   $func(23); 
  8. }; 
  9. $func = $closureFunc("lvfk"); 
  10. //结果 
  11. lvfk–男–23 

2.2.2、返回闭包函数

  1. <?php 
  2. $closureFunc = function($name){ 
  3.   echo 'closureFunc '
  4.   $sex = '男'
  5.   echo "$name+++$sex<br/>"
  6.   $func = function()use ($name,$sex){ 
  7.     echo "$name–$sex<br/>"
  8.   }; 
  9.   return $func
  10. }; 
  11. $func = $closureFunc("lvfk"); 
  12. $func(); 
  13. $func(); 
  14. //结果 
  15. closureFunc lvfk+++男 
  16. lvfk–男 
  17. lvfk–男 

2.2.3、闭包改变上下文的值,需要引用传递

  1. <?php 
  2. $closureFunc = function($name){ 
  3.   $age = 1; 
  4.   echo "$name+++$age<br/>"
  5.   $func = function()use ($name,&$age){ 
  6.     $age++; 
  7.     echo "$name–$age<br/>"
  8.   }; 
  9.   return $func
  10. }; 
  11. $func = $closureFunc("lvfk"); 
  12. $func(); 
  13. $func(); 
  14. $func(); 
  15. //结果 
  16. lvfk+++1 
  17. lvfk–2 
  18. lvfk–3 
  19. lvfk–4 

以上就是对闭包的简单应用,通过闭包,可以看出在函数外面使用闭包,传入闭包的参数内容,实际上可以是上下文对象内容,也可以在闭包内更改上下文对象值,但必须是引用传递。

模板优惠价: (点击购买)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《PHP回调函数及匿名函数概念与用法详解》
文章链接:https://www.adminn.cn/news/34911.html
本站资源模板仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。2021.5月起,网站调整,暂不再分享免费模板。谢谢理解

扫码支付后请联系右侧QQ发送下载地址!!

源码请勿用于任何涉灰站点!净化网络,站长更有责!

支付宝扫一扫打赏