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的更多相关文章

  1. 20170713_js闭包/匿名函数/作用域

    js:闭包 var getNum; function getCounter() { var n = 1; var inner = function () {return n++; } console. ...

  2. ptyhon 编程基础之函数篇(二)-----返回函数,自定义排序函数,闭包,匿名函数

    一.自定义排序函数 在Python中可以使用内置函数sorted(list)进行排序: 结果如下图所示: 但sorted也是一个高阶函数,可以接受两个参数来实现自定义排序函数,第一个参数为要排序的集合 ...

  3. PHP闭包--匿名函数

    匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数.最经常用作回调函数(callback)参数的值.当然,也有其它应用的情况. ...

  4. 【Python】闭包 & 匿名函数

    闭包 1.注意:返回的函数内部不要使用后续会发生变化的变量. def f(): gs = [] for k in range(1, 4): def g(i): return i + k gs.appe ...

  5. php Closure类 闭包 匿名函数

    php匿名函数 匿名函数就是没有名称的函数.匿名函数可以赋值给变量,还能像其他任何PHP对象那样传递.不过匿名函数仍是函数,因此可以调用,还可以传入参数.匿名函数特别适合作为函数或方法的回调. 如: ...

  6. Lambda 闭包 匿名 函数 类

    深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法) - _Luc_ - 博客园 https://www.cnblogs.com/figure9/p/java-8 ...

  7. JavaScript 闭包系列二(匿名函数及函数的闭包)

    一. 匿名函数 1. 函数的定义,可分为三种 1) 函数声明方式 function double(x) {     return 2*x; } 2)Function构造函数,把参数列表和函数体都作为字 ...

  8. 第一百一十节,JavaScript匿名函数和闭包

    JavaScript匿名函数和闭包 学习要点: 1.匿名函数 2.闭包 匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数.声明:本节内容需要有面向对象和少量设计模式基础,否则无法听懂 ...

  9. JavaScript(第十五天)【匿名函数和闭包】

      学习要点: 1.匿名函数 2.闭包 匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数.声明:本节内容需要有面向对象和少量设计模式基础,否则无法听懂.(所需基础15章的时候已经声明 ...

  10. javascript进阶课程--第三章--匿名函数和闭包

    javascript进阶课程--第三章--匿名函数和闭包 一.总结 二.学习要点 掌握匿名函数和闭包的应用 三.匿名函数和闭包 匿名函数 没有函数名字的函数 单独的匿名函数是无法运行和调用的 可以把匿 ...

随机推荐

  1. wemall软件交易平台微信图文编辑器部分代码分享

    wemall软件交易平台微信图文编辑器部分代码,可下载: controller.php <?php date_default_timezone_set("Asia/chongqing& ...

  2. 基于JAVA语言的selenium测试基础总结

    目录一.基本语句1.循环控制(break,continue)3.字符的替换(replace,repalceFirst,replaceAll,regex)4.字符串的连接("+",a ...

  3. Oracle数据库笔记

    SQL分为四大类别 1.DDL:Date Definition Language 数据定义语言  用于建立.修改.删除数据库对象(create创建表和其它对象结构:alter修改表或其它结构:drop ...

  4. C++—引用的作用

    引入 C语言中函数有两种传参的方式: 传值和传址.以传值方式, 在函数调用过程中会生成一份临时变量用形参代替, 最终把实参的值传递给新分配的临时变量即形参. 它的优点是避免了函数调用的副作用, 确无法 ...

  5. Repaints and Reflows 重绘和重排版

    当浏览器下载完所有页面HTML标记,JavaScript,CSS,图片之后,它解析文件并创建两个内部数据 一棵DOM树 表示页面结构 Normal 0 7.8 磅 0 2 false false fa ...

  6. 《转载-两篇很好的文章整合》Android中自定义控件

    两篇很好的文章,有相互借鉴的地方,整合到一起收藏 分别转载自:http://blog.csdn.net/xu_fu/article/details/7829721 http://www.cnblogs ...

  7. Memcached十问十答

    1.Memcached是什么,有什么作用? Memcached是一种纯内存的,key-value,CS架构的数据库服务软件,主要用于数据库,web服务器的缓存,以减小数据库,web服务器的访问压力,尤 ...

  8. javascript重修之书(一):如何判断变量的数据类型

    javascript重修之书(一):如何判断变量的数据类型 一:检测值类型 基本类型:(Undefined.Null.Boolean.Number和String) javascript之所以被称为一门 ...

  9. response.getWriter().write()与out.print()的区别(转)

    1.首先介绍write()和print()方法的区别:  (1).write():仅支持输出字符类型数据,字符.字符数组.字符串等  (2).print():可以将各种类型(包括Object)的数据通 ...

  10. CSS3学习笔记(3)-CSS3边框

    p{ font-size: 15px; } .alexrootdiv>div{ background: #eeeeee; border: 1px solid #aaa; width: 99%; ...