PHP匿名函数(闭包函数)详解
时间:2022-07-27
本文章向大家介绍PHP匿名函数(闭包函数)详解,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在PHP中匿名函数(Anonymous functions),也叫闭包函数( closures ),允许临时创建一个没有指定名称的函数。经常用作回调函数(callback)的参数。 当然,也有其他应用的情况。
注:php闭包是PHP5.3版本之后才有的
什么是闭包?闭包是可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。“闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)。 在编程领域我们可以通俗的说:子函数可以使用父函数中的局部变量,这种行为就叫做闭包。
PHP匿名函数和闭包使用的句法与普通函数相同,但匿名函和闭包数其实是伪装成函数的对象.
匿名函数:就是没有名称的函数.匿名函数可以赋值给变量,对象传递.不过匿名函数仍是函数,因此可以调用,还可以传入参数.匿名函数特别适合作为函数或方法的回调.
闭包:是指在创建时封装周围状态的函数.即使闭包所在的环境不存在了,闭包中封装的状态依然存在.
注意:理论上讲,闭包和匿名函数是不同的概念. 不过,PHP将其视作相同的概念.
闭包的语法相当简单,需要注意的关键字就只有use,use是连接闭包和外界变量。
$a = function() use($b) {
//TO-DO
};
下面给几个实现闭包的一个例子:
//例一:把匿名函数当做参数传递,并且调用它
function callFunc( $func ) {
$func( "some stringrn" );
}
$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 解除递归函数
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对ZaLou.Cn的支持。如果你想了解更多相关内容请查看下面相关链接
- Spark SQL 用户自定义函数UDF、用户自定义聚合函数UDAF 教程(Java踩坑教学版)
- Webpack多入口文件、热更新等体验
- 从hello world 解析程序运行机制
- 万达大量员工“被”辞职?曲德君回应:万达网科没有倒
- iOS Programming – 触摸事件处理(2)
- 洋葱海外仓融资2亿元 官网启用msyc.cc域名
- Webpack单元测试,e2e测试
- [看图说话] 基于Spark UI性能优化与调试——初级篇
- Unix下c程序内存泄露检测工具
- 查找链表中倒数第k个结点
- 12日29日人力科技前沿资讯
- 一段奇葩Javascript代码引发的思考
- 路由器、集线器、网关、网桥的联系与区别
- 对称字符串的最大长度
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- java获取时间整点工具代码
- MyBatis预编译机制详解
- ActiveMQ NMS使用过程中的一点经验
- asp.net core 认证及简单集群
- WebAPI问题追踪日志记录过滤器
- 使用责任链模式消除if分支实践
- sql操作知识点个人笔记(SQLServer篇)
- kettle学习笔记(二)——kettle基本使用
- Spring源码深度解析(二)
- Repository个人实践
- 摩斯码编解码器
- kettle学习笔记(三)——kettle资源库、运行方式与日志
- 使用Let's Encrypted HPPTS你的网站
- .net core web api + Autofac + EFCore 个人实践
- kettle学习笔记(六)——kettle转换步骤