摘自: http://www.cnblogs.com/starlion/p/3894578.html

一:匿名函数 (在php5.3.0 或以上才能使用)

php中的匿名函数(Anonymous functions), 也叫闭包函数(closures), 允许指定一个没有名称的函数。最常用的就是回调函数的参数值。(http://php.net/manual/zh/functions.anonymous.php)

匿名函数的定义:

$closureFunc = function(){....};

eg: 把匿名函数赋值给变量,通过变量来调用

$closureFunc = function($str){echo $str;};$closureFunc("hello world!");

输出: hello world!

二:闭包

2.1  将匿名函数放在普通函数中,也可以将匿名函数返回,这就构成了一个简单的闭包

function closureFunc1(){$func = function(){echo "hello";};$func();
}
closureFunc1();
//输出: hello

2.2  在匿名函数中引用局部变量

function closureFunc2(){$num = 1;$func = function(){echo $num;};$func();
}
closureFunc2();
//Notice: Undefined variable: num

上面的函数运行后,会报Notice错误,说明我们不能在匿名函数中这样使用局部变量,这时候就要引用一个php的关键字 use, 代码如下

function closureFunc2(){$num = 1;$func = function() use($num){echo $num;};$func();
}
closureFunc2();
//输出: 1

2.3  返回匿名函数

function closureFunc3(){$num = 1;$func = function() use($num){echo $num;};return $func;
}
$func = closureFunc3(); //函数返回匿名函数
$func(); //然后我们在用$func() 调用
//输出: 1

2.4 当我们在返回匿名函数时候怎么给匿名函数传参呢? 其实跟普通函数传参数一样

function closureFunc4(){$num = 1;$func = function($str) use($num){echo $num;echo "\n";echo $str;};return $func;
}
$func = closureFunc4();
$func("hello, closure4");
//输出:
//1
//hello, closure4

2.5 怎么用闭包来改变上下文引用的变量值?

function closureFunc5(){$num = 1;$func = function() use($num) {echo "\n";$num++;echo $num;};echo "\n";echo $num;return $func;
}
$func = closureFunc5();
$func();
$func();
$func();
//输出:
// 1
// 2
// 2
// 2

看上面的输入结果,显然没有达到目的, 其实只要加一个 & 引用符号就可以了

function closureFunc5(){$num = 2;$func = function() use(&$num) {echo "\n";$num++;echo $num;};echo "\n";echo $num;return $func;
}
$func = closureFunc5();
$func();
$func();
$func();
//输出:
// 2
// 3
// 4
// 5

2.6 把匿名函数当作参数传递

function callFunc($func){$func("argv");
}callFunc(function($str){echo $str;
})
//输出:
// argv

参考:

http://www.cnblogs.com/yjf512/archive/2012/10/29/2744702.html 为什么要引入闭包

http://blog.csdn.net/lgg201/article/details/6127564  php 5.3.0 的function() use() {}

php : 匿名函数(闭包) [一]相关推荐

  1. 匿名函数 闭包 ( 7 章 )

    1: function functionName(arg0,arg1){ 2: 3: 4: 5: } 6: 7: var functionName = function( arg0 , arg1 ){ ...

  2. php里面用魔术方法和匿名函数闭包函数动态的给类里面添加方法

    1.认识  __set  (在给不可访问属性赋值时,__set() 会被调用) 也就是说你再访问一个类里面没有的属性,会出发这个方法 class A{private $aa = '11';public ...

  3. PHP匿名函数 闭包 Use用法

    匿名函数是闭包的核心,匿名函数在PHP里实际上是一个Closure类的对象(请注意是对象).与普通的面向对象编程方式不同,匿名函数的代码是直接写在调用处的,不需要额外写一个类,编写方法的代码.这样的好 ...

  4. php的匿名函数和闭包函数

    php的匿名函数和闭包函数 tags: 匿名函数 闭包函数 php闭包函数 php匿名函数 function use 引言:匿名函数和闭包函数都不是特别高深的知识,但是很多刚入门的朋友却总是很困惑,因 ...

  5. Go语言中的匿名函数和闭包的样子

    1). 函数也是值,可以像普通值那样,传来传去: 2). 匿名函数: 3). 函数的类型,类似于:func(float64,float64) float64 ===================== ...

  6. JavaScript 匿名函数与闭包

    匿名函数与闭包 匿名函数 闭包 概念 相关知识点 闭包中的this 循环函数中的匿名函数和闭包 循环函数中的匿名函数 循环函数中的闭包 模仿块级作用域 私有变量 静态私有变量 匿名函数 没有函数名的函 ...

  7. 深入理解Java Lambda表达式,匿名函数,闭包

    前言 对于Lambda表达式一直是知其然不知其所以然,为了搞清楚什么是Lambda表达式,以及Lambda表达式的用法和作用,本文应运而生当做学习笔记分享出来,欢迎指正交流. 什么是Lambda 让我 ...

  8. php 代码修改后 重新实例化_从匿名函数到PHP设计模式之容器模式

    点击蓝字关注我们!每天获取最新的编程小知识! 源 / php中文网      源 / www.php.cn 从匿名函数(闭包特性)到 PHP 设计模式之容器模式 (查看原文请点击本文末尾左下角: 匿名 ...

  9. 专科 java转go 翱翔之路(一)基础语法:变量声明,匿名函数,结构体,函数,map

    本人专科!在太原干了一年了,想从java转go,上班中自学go,明年找go语言相关的工作 立帖为证! 待羽翼丰满,大风到来,便是我翱翔之时!!! 1.Go语言 1.命令 1.1 查看版本号 go ve ...

最新文章

  1. 面试官:说说Kafka处理请求的全流程
  2. sys.stderr.write(f“ERROR: {exc}“) SyntaxError: invalid syntax错误
  3. 基于SpringBoot+Vue前后端分离管理系统
  4. js 如何实现bind
  5. 经典案例鸢尾花分类, 在Keras中使用sklearn调参
  6. iOS开发小技巧--高斯模糊框架的应用
  7. 知道python语言应用2020答案_热点:大学moocPython语言基础与应用答案
  8. 【深度学习】——训练过程
  9. Bootstrap概述
  10. 【Unity|C#】基础篇(1)——基础入门
  11. 数据战略规划_在战略规划期间我应该如何协作?
  12. SAP 批导模板(WBS批导为例)
  13. caffe-openpose结构
  14. Radasm使用简明手册(中文版)
  15. 2.3.6 CSM、RMC和RSCT管理系统
  16. x264中关于编码帧存取lookahead的操作
  17. 基于Python实现的微信好友数据分析
  18. 【(伪)数论】洛谷1943 Local Maxima
  19. 基于JAVA汽车租赁系统计算机毕业设计源码+系统+lw文档+部署
  20. Redis Java客户端的选择

热门文章

  1. JSTL使用总结(2) fmt标签库和fn标签库
  2. SQL--JOIN之完全用法
  3. 日本研发圆滚滚的球形无人机,被LED屏团团包围
  4. Linux-CentOS上一些快捷键的使用
  5. Linux unit 5
  6. mongodb副本集维护
  7. Windroy Lets Android run on Windows systems-- 国外androids 虚拟系统分享
  8. SQL高手篇:精典SQL FAQ收藏
  9. Ubuntu U盘终于见到了它的主人
  10. 面试题 10.09. 排序矩阵查找