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 相关文章推荐
vBulletin HACK----关于排版的两个HACK
Oct 09 PHP
dedecms系统常用术语汇总
Apr 03 PHP
php线性表顺序存储实现代码(增删查改)
Feb 16 PHP
php实现文件下载(支持中文文名)
Dec 04 PHP
探寻PHP脚本不报错的原因
Jun 12 PHP
thinkphp在模型中自动完成session赋值示例代码
Sep 09 PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
Nov 12 PHP
通过php添加xml文档内容的方法
Jan 23 PHP
php获取给定日期相差天数的方法分析
Feb 20 PHP
php实现等比例压缩图片
Jul 26 PHP
PHP ajax+jQuery 实现批量删除功能实例代码小结
Dec 06 PHP
PHP7 字符串处理机制修改
Mar 09 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
PHP类中的魔术方法(Magic Method)简明总结
2014/07/08 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
javascript forEach通用循环遍历方法
2010/10/11 Javascript
JavaScript游戏之优化篇
2010/11/08 Javascript
json对象转字符串如何实现
2012/12/02 Javascript
js保留两位小数使用toFixed实现
2013/07/29 Javascript
JQuery中extend使用介绍
2014/03/13 Javascript
JS表的模拟方法
2015/02/05 Javascript
JavaScript中实现键值对应的字典与哈希表结构的示例
2016/06/12 Javascript
Javascript的比较汇总
2016/07/25 Javascript
JavaScript实战之菜单特效
2016/08/16 Javascript
原生javascript上传图片带进度条【实例分享】
2017/04/06 Javascript
vue的无缝滚动组件vue-seamless-scroll实例
2017/12/18 Javascript
小程序识别身份证,银行卡,营业执照,驾照的实现
2019/11/05 Javascript
微信小程序实现抖音播放效果的实例代码
2020/04/11 Javascript
js 压缩图片的示例(只缩小体积,不更改图片尺寸)
2020/10/21 Javascript
Python程序员开发中常犯的10个错误
2014/07/07 Python
浅析Python中return和finally共同挖的坑
2017/08/18 Python
使用Selenium破解新浪微博的四宫格验证码
2018/10/19 Python
python requests post多层字典的方法
2018/12/27 Python
PyQt5显示GIF图片的方法
2019/06/17 Python
如何基于python操作json文件获取内容
2019/12/24 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
2020/05/22 Python
python和php哪个容易学
2020/06/19 Python
详解Django ORM引发的数据库N+1性能问题
2020/10/12 Python
Python Tkinter实例——模拟掷骰子
2020/10/24 Python
python eventlet绿化和patch原理
2020/11/21 Python
HTML5 video 视频标签使用介绍
2014/02/03 HTML / CSS
索尼巴西商店:Sony巴西
2019/06/21 全球购物
优秀教师主要事迹
2014/02/01 职场文书
红色故事演讲稿
2014/05/22 职场文书
乡镇精神文明建设汇报材料
2014/08/15 职场文书
干部作风整顿个人剖析材料
2014/10/06 职场文书
解除劳动关系协议书2篇
2014/11/28 职场文书
标准离婚协议书范文下载
2014/11/30 职场文书
2019同学聚会主持词
2019/05/06 职场文书