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 相关文章推荐
Discuz 5.0 中读取纯真IP数据库函数分析
Mar 16 PHP
dedecms中显示数字验证码的修改方法
Mar 21 PHP
PHP 远程文件管理,可以给表格排序,遍历目录,时间排序
Aug 07 PHP
PHP setTime 设置当前时间的代码
Aug 27 PHP
深入for,while,foreach遍历时间比较的详解
Jun 08 PHP
php源码分析之DZX1.5字符串截断函数cutstr用法
Jun 17 PHP
PHP简单生成缩略图相册的方法
Jul 29 PHP
PHP5.4起内置web服务器使用方法
Aug 09 PHP
PHP延迟静态绑定的深入讲解
Apr 02 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
Apr 26 PHP
php strftime函数获取日期时间(switch用法)
May 16 PHP
TP5.0框架实现无限极回复功能的方法分析
May 04 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 常见郁闷问题答解
2006/11/25 PHP
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
2014/06/21 Servers
PHP实现GIF图片验证码
2015/11/04 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
2020/12/15 PHP
jQuery 页面载入进度条实现代码
2009/02/08 Javascript
jQuery的运行机制和设计理念分析
2011/04/05 Javascript
JS按位非(~)运算符与~~运算符的理解分析
2011/07/31 Javascript
jquery 操作DOM案例代码分享
2012/04/05 Javascript
JS 新增Cookie 取cookie值 删除cookie 举例详解
2014/10/10 Javascript
JS模拟酷狗音乐播放器收缩折叠关闭效果代码
2015/10/29 Javascript
javascript实现网页中涉及的简易运动(改变宽高、透明度、位置)
2015/11/29 Javascript
Three.js快速入门教程
2016/09/09 Javascript
在vue项目中使用sass的配置方法
2018/03/20 Javascript
搭建一个nodejs脚手架的方法步骤
2019/06/28 NodeJs
基于form-data请求格式详解
2019/10/29 Javascript
解决vue字符串换行问题(绝对管用)
2020/08/06 Javascript
Vue-cli打包后部署到子目录下的路径问题说明
2020/09/02 Javascript
Openlayers实现图形绘制
2020/09/28 Javascript
Python使用scrapy抓取网站sitemap信息的方法
2015/04/08 Python
Python正则抓取新闻标题和链接的方法示例
2017/04/24 Python
Pytorch Tensor的索引与切片例子
2019/08/18 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
2020/01/16 Python
简单了解如何封装自己的Python包
2020/07/08 Python
python 实现socket服务端并发的四种方式
2020/12/14 Python
Alpine安装Python3依赖出现的问题及解决方法
2020/12/25 Python
Hanky Panky官方网站:内衣和睡衣
2019/07/25 全球购物
大学生就业自我鉴定
2013/10/26 职场文书
yy生日主持词
2014/03/20 职场文书
《悯农》教学反思
2014/04/28 职场文书
经营管理策划方案
2014/05/22 职场文书
安全宣传标语口号
2014/06/06 职场文书
学校节能减排方案
2014/06/13 职场文书
出生医学证明书
2014/09/15 职场文书
2014年环境卫生工作总结
2014/11/24 职场文书
春风化雨观后感
2015/06/11 职场文书
CentOS7 minimal 最小化安装网络设置过程
2022/12/24 Servers