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 相关文章推荐
在线增减.htpasswd内的用户
Oct 09 PHP
php实现转换ubb代码的方法
Jun 18 PHP
PHP技术开发微信公众平台
Jul 22 PHP
利用PHP如何实现Socket服务器
Sep 23 PHP
php解析url并得到url中的参数及获取url参数的四种方式
Oct 26 PHP
修改PHP脚本使WordPress拦截垃圾评论的方法示例
Dec 10 PHP
Symfony核心类概述
Mar 17 PHP
PHP正则表达式过滤html标签属性(DEMO)
May 04 PHP
PHP 自动加载的简单实现(推荐)
Aug 12 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 PHP
PHP校验15位和18位身份证号的类封装
Nov 07 PHP
PHP implode()函数用法讲解
Mar 08 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/10/09 PHP
PHP通过session id 实现session共享和登录验证的代码
2012/06/03 PHP
PHP-Fcgi下PHP的执行时间设置方法
2013/08/02 PHP
分享PHP计算两个日期相差天数的代码
2015/12/23 PHP
WordPress开发中短代码的实现及相关函数使用技巧
2016/01/05 PHP
ie下jquery.getJSON的缓存问题的处理方法
2013/03/29 Javascript
js改变img标签的src属性在IE下没反应的解决方法
2013/07/23 Javascript
原生js实现百叶窗效果及原理介绍
2016/04/12 Javascript
js+html5实现canvas绘制网页时钟的方法
2016/05/21 Javascript
jquery实用技巧之输入框提示语句
2016/07/28 Javascript
AngularJS基础 ng-mouseover 指令简单示例
2016/08/02 Javascript
Vue中的v-cloak使用解读
2017/03/27 Javascript
jQuery实现点击DIV同时点击CheckBox,并为DIV上背景色的实例
2017/12/18 jQuery
JavaScript实现的超简单计算器功能示例
2017/12/23 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
2018/09/03 Javascript
Vue表单输入绑定的示例代码
2018/11/01 Javascript
生成无限制的微信小程序码的示例代码
2019/09/20 Javascript
DWR内存兼容及无法调用问题解决方案
2020/10/16 Javascript
Python的Bottle框架中实现最基本的get和post的方法的教程
2015/04/30 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
2018/04/28 Python
Python图像处理之识别图像中的文字(实例讲解)
2018/05/10 Python
详解Python3.6的py文件打包生成exe
2018/07/13 Python
Python3实现二叉树的最大深度
2019/09/30 Python
使用python检查yaml配置文件是否符合要求
2020/04/09 Python
需要知道的CSS3动画技术
2010/01/01 HTML / CSS
超级英雄、电影和电视、乐队和音乐T恤:Loud Clothing
2019/09/01 全球购物
会计自我鉴定范文
2013/10/06 职场文书
团支书的期末学习总结自我评价
2013/11/01 职场文书
婚礼答谢宴主持词
2014/03/14 职场文书
博士生求职信
2014/07/06 职场文书
院党委组织查摆问题对照检查材料思想汇报2014
2014/10/08 职场文书
2015年党员自评材料
2014/12/17 职场文书
元宵节寄语大全
2015/02/27 职场文书
2015年师德表现自我评价
2015/03/05 职场文书
Python基础之常用库常用方法整理
2021/04/30 Python
Navicat连接MySQL错误描述分析
2021/06/02 MySQL