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 相关文章推荐
一个程序下载的管理程序(二)
Oct 09 PHP
PHP编码规范之注释和文件结构说明
Jul 09 PHP
PHP缓存技术的使用说明
Aug 06 PHP
PHP调用MySQL存储过程并返回值的方法
Dec 26 PHP
学习php设计模式 php实现工厂模式(factory)
Dec 07 PHP
ThinkPHP框架安全实现分析
Mar 14 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
Nov 07 PHP
php脚本守护进程原理与实现方法详解
Jul 20 PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
Feb 15 PHP
PHP使用mysqli同时执行多条sql查询语句的实例
Mar 22 PHP
laravel解决迁移文件一次删除创建字段报错的问题
Oct 24 PHP
PHP常量及变量区别原理详解
Aug 14 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
YII2框架中查询生成器Query()的使用方法示例
2020/03/18 PHP
Javascript学习笔记7 原型链的原理
2010/01/11 Javascript
jquery动画4.升级版遮罩效果的图片走廊--带自动运行效果
2012/08/24 Javascript
在页面加载完成后通过jquery给多个span赋值
2014/05/21 Javascript
原生javascript实现DIV拖拽并计算重复面积
2015/01/02 Javascript
Jquery实现textarea根据文本内容自适应高度
2015/04/03 Javascript
AngularJS 执行流程详细介绍
2016/08/18 Javascript
AngularJS通过ng-route实现基本的路由功能实例详解
2016/12/13 Javascript
BootStrap中的Fontawesome 图标
2017/05/25 Javascript
微信小程序开发之toast等弹框提示使用教程
2017/06/08 Javascript
js捆绑TypeScript声明文件的方法教程
2018/04/13 Javascript
深入浅析Vue中的Prop
2018/06/10 Javascript
vue中的计算属性实例详解
2018/09/19 Javascript
ES6 新增的创建数组的方法(小结)
2019/08/01 Javascript
在nodejs中创建child process的方法
2021/01/26 NodeJs
vue登录页实现使用cookie记住7天密码功能的方法
2021/02/18 Vue.js
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
2015/06/28 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
2017/11/23 Python
pytorch + visdom CNN处理自建图片数据集的方法
2018/06/04 Python
Python实现多线程的两种方式分析
2018/08/29 Python
使用selenium模拟登录解决滑块验证问题的实现
2019/05/10 Python
python word转pdf代码实例
2019/08/16 Python
关于Numpy数据类型对象(dtype)使用详解
2019/11/27 Python
python基于plotly实现画饼状图代码实例
2019/12/16 Python
理解Django 中Call Stack机制的小Demo
2020/09/01 Python
利用Opencv实现图片的油画特效实例
2021/02/28 Python
MyFrenchPharma中文网:最大的法国药妆平台
2016/10/07 全球购物
MySQL面试题目集锦
2016/04/14 面试题
报告会主持词
2014/04/02 职场文书
2015届本科毕业生自我鉴定
2014/09/27 职场文书
好媳妇事迹材料
2014/12/24 职场文书
学生检讨书
2015/01/27 职场文书
暑假安全保证书
2015/02/28 职场文书
2015年七年级班主任工作总结
2015/05/21 职场文书
读《钢铁是怎样炼成的》有感:百炼方成钢
2019/11/05 职场文书
AJAX实现指定部分页面刷新效果
2021/10/16 Javascript