PHP匿名函数(闭包函数)详解


Posted in PHP onMarch 22, 2019

在PHP中匿名函数(Anonymous functions),也叫闭包函数( closures ),允许临时创建一个没有指定名称的函数。经常用作回调函数(callback)的参数。 当然,也有其他应用的情况。

注:php闭包是PHP5.3版本之后才有的

什么是闭包?闭包是可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。“闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)。 在编程领域我们可以通俗的说:子函数可以使用父函数中的局部变量,这种行为就叫做闭包。

PHP匿名函数和闭包使用的句法与普通函数相同,但匿名函和闭包数其实是伪装成函数的对象.

匿名函数:就是没有名称的函数.匿名函数可以赋值给变量,对象传递.不过匿名函数仍是函数,因此可以调用,还可以传入参数.匿名函数特别适合作为函数或方法的回调.

闭包:是指在创建时封装周围状态的函数.即使闭包所在的环境不存在了,闭包中封装的状态依然存在.

注意:理论上讲,闭包和匿名函数是不同的概念. 不过,PHP将其视作相同的概念.

闭包的语法相当简单,需要注意的关键字就只有use,use是连接闭包和外界变量。

$a = function() use($b) {
 //TO-DO
};

下面给几个实现闭包的一个例子:

//例一:把匿名函数当做参数传递,并且调用它
function callFunc( $func ) {
  $func( "some string\r\n" );
}
$printStrFunc = function( $str ) {
  echo $str;
};
//例二:也可以直接将匿名函数进行传递。如果你了解js,这种写法可能会很熟悉
callFunc( $printStrFunc );
callFunc( function( $str ) {
  echo $str;
} );
//例三 :连接闭包和外界变量的关键字:USE
function getMoney() {
 $rmb = 1;
 $dollar = 6;
 $func = function() use ( $rmb ) {
  echo $rmb;
  echo $dollar;
 };
 $func();
}
getMoney();
//输出:1
//报错,找不到dorllar变量
//例四:在匿名函数中改变上下文的变量
function getMoney() {
  $rmb = 1;
  $func = function() use ( &$rmb ) {
   echo $rmb . "<br>";
     //把$rmb的值加1
   $rmb++;
 };
 $func();
 echo $rmb;
}
getMoney();
//输出:
//1
//2

闭包虽然语法和实现非常简单,但是用好却不易。

用好闭包,可以帮我们

  • 1 减少foreach的循环的代码
  • 2 减少函数的参数
  • 3 解除递归函数

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

PHP 相关文章推荐
通过对php一些服务器端特性的配置加强php的安全
Oct 09 PHP
社区(php&amp;&amp;mysql)六
Oct 09 PHP
php mssql 日期出现中文字符的解决方法
Mar 10 PHP
PHP常用的缓存技术汇总
May 05 PHP
30个php操作redis常用方法代码例子
Jul 05 PHP
PHP将HTML转换成文本的实现代码
Jan 21 PHP
php实现比较全的数据库操作类
Jun 18 PHP
PHP数据的提交与过滤基本操作实例详解
Nov 11 PHP
php 删除一维数组中某一个值元素的操作方法
Feb 01 PHP
PHP实现小程序批量通知推送
Nov 27 PHP
PHP面向对象类型约束用法分析
Jun 12 PHP
Laravel如何同时连接多个数据库详解
Aug 13 PHP
PHP利用递归函数实现无限级分类的方法
Mar 22 #PHP
用PHP的反射实现委托模式的讲解
Mar 22 #PHP
PHP读取目录树的实现方法分析
Mar 22 #PHP
针对PHP开发安全问题的相关总结
Mar 22 #PHP
浅谈PHP中的Trait使用方法
Mar 22 #PHP
PHP观察者模式定义与用法实例分析
Mar 22 #PHP
wordpress自定义标签云与随机获取标签的方法详解
Mar 22 #PHP
You might like
ADODB的数据库封包程序库
2006/12/31 PHP
基于PHP实现假装商品限时抢购繁忙的效果
2015/10/16 PHP
PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能示例
2018/05/23 PHP
PHP7变量处理机制修改
2021/03/09 PHP
Jquery 常用方法经典总结
2010/01/28 Javascript
jQuery EasyUI 中文API Layout(Tabs)
2010/04/27 Javascript
简单的前端js+ajax 购物车框架(入门篇)
2011/10/29 Javascript
javascript 另一种图片滚动切换效果思路
2012/04/20 Javascript
javaScript arguments 对象使用介绍
2013/10/18 Javascript
使用forever管理nodejs应用教程
2014/06/03 NodeJs
解决checkbox的attr(checked)一直为undefined问题
2014/06/16 Javascript
Javascript实现Array和String互转换的方法
2015/12/21 Javascript
AngularJS Toaster使用详解
2017/02/24 Javascript
AngularJS实现自定义指令与控制器数据交互的方法示例
2017/06/19 Javascript
Vue官方推荐AJAX组件axios.js使用方法详解与API
2018/10/09 Javascript
vue-router传参用法详解
2019/01/19 Javascript
JS手写一个自定义Promise操作示例
2020/03/16 Javascript
vue+elementUI动态增加表单项并添加验证的代码详解
2020/12/17 Vue.js
[04:49]期待西雅图之战 2016国际邀请赛中国区预选赛WINGS战队赛后采访
2016/06/29 DOTA
[56:46]Liquid vs IG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Tensorflow之构建自己的图片数据集TFrecords的方法
2018/02/07 Python
Python基础之条件控制操作示例【if语句】
2019/03/23 Python
pygame实现俄罗斯方块游戏(基础篇2)
2019/10/29 Python
python验证码图片处理(二值化)
2019/11/01 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
2020/02/13 Python
python shell命令行中import多层目录下的模块操作
2020/03/09 Python
解决更改AUTH_USER_MODEL后出现的问题
2020/05/14 Python
Pycharm生成可执行文件.exe的实现方法
2020/06/02 Python
Python程序慢的重要原因
2020/09/04 Python
中层干部岗位职责
2013/12/18 职场文书
企业办公室岗位职责
2014/03/12 职场文书
反对邪教标语
2014/06/30 职场文书
2014学校领导四风对照检查材料思想汇报
2014/09/23 职场文书
故意杀人案辩护词
2015/05/21 职场文书
Python获取字典中某个key的value
2022/04/13 Python
Vue2项目中对百度地图的封装使用详解
2022/06/16 Vue.js