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 截取字符串函数整理(支持gb2312和utf-8)
Feb 16 PHP
PHP中防止SQL注入攻击和XSS攻击的两个简单方法
Apr 15 PHP
神盾加密解密教程(一)PHP变量可用字符
May 28 PHP
通过php修改xml文档内容的方法
Jan 23 PHP
php实现遍历多维数组的方法
Nov 25 PHP
php获取文件后缀的9种方法
Mar 22 PHP
PHP图片加水印实现方法
May 06 PHP
微信支付开发动态链接Native支付
Jul 12 PHP
Yii视图操作之自定义分页实现方法
Jul 14 PHP
PHP 传输会话curl函数的实例详解
Sep 12 PHP
PHP 获取 ping 时间的实现方法
Sep 29 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
Dec 30 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
动画 《Pokemon Sword·Shield》系列WEB动画《薄明之翼》第2话声优阵容公开!
2020/03/06 日漫
PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
2010/07/09 PHP
yii的CURD操作实例详解
2014/12/04 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
2016/05/07 PHP
总结PHP删除字符串最后一个字符的三种方法
2016/08/30 PHP
php中strtotime函数性能分析
2016/11/20 PHP
Laravel-admin之修改操作日志的方法
2019/09/30 PHP
CLASS_CONFUSION JS混淆 全源码
2007/12/12 Javascript
从jQuery.camelCase()学习string.replace() 函数学习
2011/09/13 Javascript
使用javascript:将其它类型值转换成布尔类型值的解决方法详解
2013/05/07 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
2014/12/22 Javascript
JS实现浏览器状态栏显示时间的方法
2015/10/27 Javascript
jQuery实现选项卡切换效果简单演示
2015/12/09 Javascript
JS表单验证的代码(常用)
2016/04/08 Javascript
jQuery中的deferred使用方法
2017/03/27 jQuery
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
2017/08/18 Javascript
深入浅析Vue全局组件与局部组件的区别
2018/06/15 Javascript
详解Nuxt.js部署及踩过的坑
2018/08/07 Javascript
JS前端模块化原理与实现方法详解
2020/03/17 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
2020/09/09 Javascript
Python 除法小技巧
2008/09/06 Python
Python Deque 模块使用详解
2014/07/04 Python
Python中__name__的使用实例
2015/04/14 Python
Python-接口开发入门解析
2019/08/01 Python
python 实现生成均匀分布的点
2019/12/05 Python
Python嵌套函数,作用域与偏函数用法实例分析
2019/12/26 Python
python多线程爬取西刺代理的示例代码
2021/01/30 Python
Smashbox英国官网:美国知名彩妆品牌
2017/11/13 全球购物
Boden澳大利亚官网:英国在线服装公司
2018/08/05 全球购物
Theflamel意大利:女士奢华服装、鞋子和配件
2020/01/11 全球购物
门卫工作岗位职责
2013/12/17 职场文书
中学生民族团结演讲稿
2014/08/27 职场文书
情感电台广播稿
2015/08/18 职场文书
导游词之安徽醉翁亭
2020/01/10 职场文书
PostgreSQL基于pgrouting的路径规划处理方法
2022/04/18 PostgreSQL
永中文档在线转换预览基于nginx配置部署方案
2022/06/10 Servers