php : 匿名函数(闭包) [一]
摘自: 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 : 匿名函数(闭包) [一]相关推荐
- 匿名函数 闭包 ( 7 章 )
1: function functionName(arg0,arg1){ 2: 3: 4: 5: } 6: 7: var functionName = function( arg0 , arg1 ){ ...
- php里面用魔术方法和匿名函数闭包函数动态的给类里面添加方法
1.认识 __set (在给不可访问属性赋值时,__set() 会被调用) 也就是说你再访问一个类里面没有的属性,会出发这个方法 class A{private $aa = '11';public ...
- PHP匿名函数 闭包 Use用法
匿名函数是闭包的核心,匿名函数在PHP里实际上是一个Closure类的对象(请注意是对象).与普通的面向对象编程方式不同,匿名函数的代码是直接写在调用处的,不需要额外写一个类,编写方法的代码.这样的好 ...
- php的匿名函数和闭包函数
php的匿名函数和闭包函数 tags: 匿名函数 闭包函数 php闭包函数 php匿名函数 function use 引言:匿名函数和闭包函数都不是特别高深的知识,但是很多刚入门的朋友却总是很困惑,因 ...
- Go语言中的匿名函数和闭包的样子
1). 函数也是值,可以像普通值那样,传来传去: 2). 匿名函数: 3). 函数的类型,类似于:func(float64,float64) float64 ===================== ...
- JavaScript 匿名函数与闭包
匿名函数与闭包 匿名函数 闭包 概念 相关知识点 闭包中的this 循环函数中的匿名函数和闭包 循环函数中的匿名函数 循环函数中的闭包 模仿块级作用域 私有变量 静态私有变量 匿名函数 没有函数名的函 ...
- 深入理解Java Lambda表达式,匿名函数,闭包
前言 对于Lambda表达式一直是知其然不知其所以然,为了搞清楚什么是Lambda表达式,以及Lambda表达式的用法和作用,本文应运而生当做学习笔记分享出来,欢迎指正交流. 什么是Lambda 让我 ...
- php 代码修改后 重新实例化_从匿名函数到PHP设计模式之容器模式
点击蓝字关注我们!每天获取最新的编程小知识! 源 / php中文网 源 / www.php.cn 从匿名函数(闭包特性)到 PHP 设计模式之容器模式 (查看原文请点击本文末尾左下角: 匿名 ...
- 专科 java转go 翱翔之路(一)基础语法:变量声明,匿名函数,结构体,函数,map
本人专科!在太原干了一年了,想从java转go,上班中自学go,明年找go语言相关的工作 立帖为证! 待羽翼丰满,大风到来,便是我翱翔之时!!! 1.Go语言 1.命令 1.1 查看版本号 go ve ...
最新文章
- 面试官:说说Kafka处理请求的全流程
- sys.stderr.write(f“ERROR: {exc}“) SyntaxError: invalid syntax错误
- 基于SpringBoot+Vue前后端分离管理系统
- js 如何实现bind
- 经典案例鸢尾花分类, 在Keras中使用sklearn调参
- iOS开发小技巧--高斯模糊框架的应用
- 知道python语言应用2020答案_热点:大学moocPython语言基础与应用答案
- 【深度学习】——训练过程
- Bootstrap概述
- 【Unity|C#】基础篇(1)——基础入门
- 数据战略规划_在战略规划期间我应该如何协作?
- SAP 批导模板(WBS批导为例)
- caffe-openpose结构
- Radasm使用简明手册(中文版)
- 2.3.6 CSM、RMC和RSCT管理系统
- x264中关于编码帧存取lookahead的操作
- 基于Python实现的微信好友数据分析
- 【(伪)数论】洛谷1943 Local Maxima
- 基于JAVA汽车租赁系统计算机毕业设计源码+系统+lw文档+部署
- Redis Java客户端的选择