VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > PHP >
  • PHP回调函数及匿名函数概念与用法详解

这篇文章主要介绍了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 

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

 

出处:http://www.phpfensi.com/php/20210905/17913.html


相关教程