闭包(匿名函数) php
php中的闭包,之前不理解。以前项目中虽然有用到,也是别人怎么用,自己也跟着怎么用,也没具体去看一下,时间长了就忘了,也不知道闭包是怎么回事。今天网上搜集了关于php闭包相关的文章,看了7,8篇,干货不多,大都复制粘贴党,现在根据自己的理解小结一下
闭包支持版本

根据官方文档里说的closure是5.3.0之后才支持以及很多文章说php是5.3.0之后才引入的,也没亲自验证过,暂时就理解为php版本大于5.3.0才有了闭包概念,支持闭包。
语法
函数:function func ($arg = xxx) {xxx};
匿名函数: 没有函数名的函数 比如 function($arg = xxx){xxx};
闭包:匿名函数加上use用法 比如 function($arg = xxx)use ($a, $b) {xxx};
对比
函数:相关语句块的集合,可以根据传入的条件完成一个小功能。
匿名函数:虽然有了函数,但是函数起名字是一件较麻烦的事,且在同一命名空间下,函数命名有可能出现重复。一旦出现重复,程序就会报错。所以有了匿名函数。
闭包:匿名函数的增加版,添加了use用法,申明时获取上下文内容,而不是调用时才获取。
闭包优点
网上说闭包有减少foreach,减少函数参数,接触递归等好处,感觉这些和闭包关系不大。个人认为,闭包带来的最大好处在于use。
php中变量有引用一说(其他语言中也有类似的说法),所以use中的变量存放的可能是一个变量的值拷贝,也可能是一块内存地址(类似于c语言中的指针)
use中变量放引用(内存地址)有个比较好的例子 计数器,代码如下
$start = 0;
$funcCount = function () use (&$start) {$start++; return $start;};
unset($start);
以上3行代码就定义了一个简单的计数器,变量start销毁后,由于闭包中有对start的引用,所以start之前指向的内存地址不会被回收,此时这块内存地址就脱离程序的掌控,通过$funcCount()可以访问到这块内存,执行计数操作并返回,该地址中的值修改常理来说只会被该匿名函数修改,不会被其他程序误改。
暂时就说到这里,有不对的地方,欢迎批评指正,共同进步
闭包(匿名函数) php的更多相关文章
- 20170713_js闭包/匿名函数/作用域
js:闭包 var getNum; function getCounter() { var n = 1; var inner = function () {return n++; } console. ...
- ptyhon 编程基础之函数篇(二)-----返回函数,自定义排序函数,闭包,匿名函数
一.自定义排序函数 在Python中可以使用内置函数sorted(list)进行排序: 结果如下图所示: 但sorted也是一个高阶函数,可以接受两个参数来实现自定义排序函数,第一个参数为要排序的集合 ...
- PHP闭包--匿名函数
匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数.最经常用作回调函数(callback)参数的值.当然,也有其它应用的情况. ...
- 【Python】闭包 & 匿名函数
闭包 1.注意:返回的函数内部不要使用后续会发生变化的变量. def f(): gs = [] for k in range(1, 4): def g(i): return i + k gs.appe ...
- php Closure类 闭包 匿名函数
php匿名函数 匿名函数就是没有名称的函数.匿名函数可以赋值给变量,还能像其他任何PHP对象那样传递.不过匿名函数仍是函数,因此可以调用,还可以传入参数.匿名函数特别适合作为函数或方法的回调. 如: ...
- Lambda 闭包 匿名 函数 类
深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法) - _Luc_ - 博客园 https://www.cnblogs.com/figure9/p/java-8 ...
- JavaScript 闭包系列二(匿名函数及函数的闭包)
一. 匿名函数 1. 函数的定义,可分为三种 1) 函数声明方式 function double(x) { return 2*x; } 2)Function构造函数,把参数列表和函数体都作为字 ...
- 第一百一十节,JavaScript匿名函数和闭包
JavaScript匿名函数和闭包 学习要点: 1.匿名函数 2.闭包 匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数.声明:本节内容需要有面向对象和少量设计模式基础,否则无法听懂 ...
- JavaScript(第十五天)【匿名函数和闭包】
学习要点: 1.匿名函数 2.闭包 匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数.声明:本节内容需要有面向对象和少量设计模式基础,否则无法听懂.(所需基础15章的时候已经声明 ...
- javascript进阶课程--第三章--匿名函数和闭包
javascript进阶课程--第三章--匿名函数和闭包 一.总结 二.学习要点 掌握匿名函数和闭包的应用 三.匿名函数和闭包 匿名函数 没有函数名字的函数 单独的匿名函数是无法运行和调用的 可以把匿 ...
随机推荐
- 基于 Koa平台Node.js开发的KoaHub.js的控制器,模型,帮助方法自动加载
koahub-loader koahub-loader是基于 Koa平台Node.js开发的KoaHub.js的koahub-loader控制器,模型,帮助方法自动加载 koahub loader I ...
- 《Django By Example》第九章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者@ucag 注:哈哈哈,第九章终于来啦 ...
- 【运维监控】四款云服务监控工具介绍:Nagios 、 ganglia、zabbix、onealert
在我们日常的工作中,有时候需要监控和管理平台的运行状况,而服务运行是否存在异常,是否有软硬件bug等,均需要第一时间知道.对服务状态了如指掌,是一个很重要的事情.那么这个如何做到呢,我们之前在进行私有 ...
- web第十天总结
今天进入web学习第十天,学习了xml序列化,servlet,其他的想不起来了,回顾以前的java基础面向对象,多态,继承.封装,但是还不是很理解.对于map,list,set更是理解不透,2011年 ...
- [转]利用excel进行线性规划求解
利用线性回归方法求解生产计划 方法一: 1.建立数学模型: 设变量:设生产拉盖式书桌x台,普通式书桌y台,可得最大利润 确定目标函数及约束条件 目标函 ...
- Android之XListView下拉刷新,更新网络美女图
一.简介: 下拉刷新是一种特定的手动刷新交互,和其他的同类操作不同的地方在于它采用了更加直觉的下拉操作,所以它的交互足够清晰明显. 下拉刷新主要用在类似ListView这样的控件,设计下拉刷新有三 ...
- python全栈开发第10天-正则表达式
正则表达式 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表通常被用来检索.替换那些符合某个模式 ...
- 实例PK(Vue服务端渲染 VS Vue浏览器端渲染)
Vue 2.0 开始支持服务端渲染的功能,所以本文章也是基于vue 2.0以上版本.网上对于服务端渲染的资料还是比较少,最经典的莫过于Vue作者尤雨溪大神的 vue-hacker-news.本人在公司 ...
- 效率神器 Workflow 实例分享
WorkflowShare Workflow实例分享,Github链接:WorkflowShare logo.jpg 苹果公司收购 Workflow 并将其完全免费,作为一款效率类 APP,Workf ...
- 简单实用的JQuery弹出层
效果: 初始状态时滚动条是可以滚动的 弹出层出现之后:1.弹窗始终居于整个窗口的中间 2.滚动条不可滚动 实现代码: HTML代码: <div class="container&quo ...