摘自: 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. 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数

    [源码下载] 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数 作者:webabcd 介绍速战速决 之 PHP 函数基础 函数参数 函 ...

  2. php : 匿名函数(闭包) [二]

    摘自: http://www.cnblogs.com/yjf512/archive/2012/10/29/2744702.html php的闭包(Closure)也就是匿名函数.是PHP5.3引入的. ...

  3. javascript匿名函数 闭包

    匿名函数 (function(){                console.info("111111111");            })(); var my = (fun ...

  4. PHP匿名函数(闭包)

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

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

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

  6. Go语言 - 函数 | 作用域 | 匿名函数 | 闭包 | 内置函数

    函数是组织好的.可重复使用的.用于执行指定任务的代码块.本文介绍了Go语言中函数的相关内容. 介绍 Go语言中支持函数.匿名函数和闭包,并且函数在Go语言中属于“一等公民”. 函数可以赋值给变量 函数 ...

  7. PHP函数(六)-匿名函数(闭包函数)

    匿名函数能够临时创建一个没有名称的函数,常用作回调函数参数的值 <?php $test = function($a){ echo "Hello,".$a; }; $test( ...

  8. JS匿名函数&闭包

    <html> <head> <title> test </title> </head> <body> <script ty ...

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

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

随机推荐

  1. CentOS 6.6 安装 PHP Memcached 扩展

    PHP 的 Memcached扩展使用了 libmemcached 库提供的 api 与 memcached 服务端进行交互.它同样提供了一个 session 处理器(memcached). PHP ...

  2. 遍历echsop的region表形成缓存的程序

    header("Content-type: text/html; charset=utf-8"); $con = mysql_connect("localhost&quo ...

  3. 针对focus和blur的Dom事件触发顺序

    Dom事件触发顺序,拿文本框举例: 它会先触发focus事件,之后才会触发在有交点之后才能触发的一些如 click  change 等事件(但如果有mousedown则先执行). 而相对于blur而言 ...

  4. Jmeter进行数据库压测

    一.配置并发用户 新建线程组,设置线程数,Ramp-up和循环次数 二.添加JDBC请求 先选中JDBC Users(线程组),右键选中ADD-Config Element--JDBC Connect ...

  5. sql操作之修改表结构

    修改表的语法=========================增加列[add 列名]=========================①alter table 表名 add 列名 列类型 列参数[加的 ...

  6. ios每日一发--Leanclude数据云存储以及登录 注册账户

    利用LeanCloud来实现注册账号,存储账号以及,登录时查询账号是否正确.集成方式很简单可以看这里的官方文档.地址是这里: https://leancloud.cn/docs/ 在这里创建应用,以及 ...

  7. 快速激活JetBrains PhpStorm WebStorm系列产品

    从官方网站下载正版PhpStorm 安装后,注册时选择“License server” 输入“http://idea.lanyus.com/” (不带双引号,后面的斜杠要带上) 完成 恭喜你 激活Je ...

  8. electron开发(一)

    0. 简介 http://electron.atom.io/ 官网 https://www.v2ex.com/t/277623   基于 Electron 的 Linux 下的网易云音乐 https: ...

  9. Java Servlet(七):JavaWeb MVC 操作(jdk7+tomcat7+eclipse)

    之前一段时间一直忙于毕业设计,也没有空学习了,本篇继续学习. 本篇将开始学习java web下使用servlet下来操作数据库,并展示到界面上的使用方法. 新建工程ServletMvc001. 目录结 ...

  10. linux----------CentOS的一些命令记录。

    1.查看linux操作系统位数的命令:getconf LONG_BIT 2.安装sz(下载)和rz(上传)命令:yum install lrzsz 3.tail -n 5 文件名字    : 查看大型 ...