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 相关文章推荐
GD输出汉字的函数的分析
Oct 09 PHP
关于文本留言本的分页代码
Oct 09 PHP
深入分析PHP引用(&amp;)
Sep 04 PHP
PHP正则替换函数preg_replace和preg_replace_callback使用总结
Sep 22 PHP
php更新mysql后获取改变行数的方法
Dec 25 PHP
如何使用php脚本给html中引用的js和css路径打上版本号
Nov 18 PHP
Laravel构建即时应用的一种实现方法详解
Aug 31 PHP
PHP文件系统管理(实例讲解)
Sep 19 PHP
PHP远程连接oracle数据库操作实现方法图文详解
Apr 11 PHP
PHP的静态方法与普通方法用法实例分析
Sep 26 PHP
Yii Framework框架开发微信公众平台示例
Apr 26 PHP
php redis setnx分布式锁简单原理解析
Oct 23 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
全国FM电台频率大全 - 3 河北省
2020/03/11 无线电
Sony CFR 320 修复改造
2020/03/14 无线电
php在文件指定行中写入代码的方法
2012/05/23 PHP
php中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
2012/11/01 PHP
php使用ICQ网关发送手机短信
2013/10/30 PHP
使用新浪微博API的OAuth认证发布微博实例
2015/03/27 PHP
php实现的简单检验登陆类
2015/06/18 PHP
lib.utf.js
2007/08/21 Javascript
兼容IE和Firefox火狐的上下、左右循环无间断滚动JS代码
2013/04/19 Javascript
异步动态加载js与css文件的js代码
2013/09/15 Javascript
常用的JavaScript验证正则表达式汇总
2013/11/26 Javascript
JS设置CSS样式的方式汇总
2017/01/21 Javascript
JS实现的四级密码强度检测功能示例
2017/05/11 Javascript
jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一
2017/05/26 jQuery
javascript基于定时器实现进度条功能实例
2017/10/13 Javascript
angular2/ionic2 实现搜索结果中的搜索关键字高亮的示例
2018/08/17 Javascript
详解js访问对象的属性和方法
2018/10/25 Javascript
使用Vue中 v-for循环列表控制按钮隐藏显示功能
2019/04/23 Javascript
Node.js中Koa2在控制台输出请求日志的方法示例
2019/05/02 Javascript
通过javascript实现扫雷游戏代码实例
2020/02/09 Javascript
基于JavaScript实现十五拼图代码实例
2020/04/26 Javascript
Python爬虫文件下载图文教程
2018/12/23 Python
python怎么对数字进行过滤
2020/07/05 Python
小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码
2020/09/25 Python
python UDF 实现对csv批量md5加密操作
2021/01/01 Python
HTML5实现多张图片上传功能
2016/03/11 HTML / CSS
GAZMAN官网:澳大利亚领先的男装品牌
2019/12/19 全球购物
护理专业自荐信
2013/12/03 职场文书
工程造价专业求职信
2014/07/17 职场文书
干部作风建设年活动剖析材料
2014/10/23 职场文书
项目安全员岗位职责
2015/02/15 职场文书
一个都不能少观后感
2015/06/04 职场文书
反腐倡廉心得体会2016
2016/01/13 职场文书
企业转让协议书(范文2篇)
2019/08/15 职场文书
详解vue身份认证管理和租户管理
2021/05/25 Vue.js
如何vue使用el-table遍历循环表头和表体数据
2022/04/26 Vue.js