摘自: 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. request获取请求头和请求数据

    package cn.itcast.request; import java.io.IOException; import java.io.InputStream; import java.io.Pr ...

  2. String-原型属性

    <script> /*将trim方法定义到字符串对象中 *使用字符串的原型属性来完成 *原型prototype:就是该对象的一个描述,该描述中如果添加新功能,那么该对象就具备这些新功能. ...

  3. SharePoint 2013 网站应用程序、网站集、网站知识整理

    网站应用程序:Web 应用程序是一种可以通过Web访问的应用程序.我们自己以前用VS开发的Web应用程序一般是通过人工部署到IIS上的,而SharePoint的Web应用程序是由SharePoint安 ...

  4. Yii源码阅读笔记(二十二)

    Module类,属性的注释和构造函数的注释: <?php /** * @link http://www.yiiframework.com/ * @copyright Copyright (c) ...

  5. loadrunner获取返回值为乱码

    找了很多方法,utf-8也设置了,还是不行,只有有转码方法了 web_reg_save_param("res2", "LB=\"msg\":\&quo ...

  6. C#中的延迟加载

    什么是延迟加载?   延迟加载顾名思义就是:推迟加载的时机,当真正使用的时候才加载. 通常在创建一个大对象时,有些属性我们可以在使用到的时候才去创建(设置属性的值),这个可以有效的提升系统性能. 示例 ...

  7. winform最小化后隐藏到右下角,单击或双击后恢复 .

    01.//先拖一个notifyIcon控件进来 02. 03.//然后在您的notifyIcon控件中添加 MouseDoubleClick事件,代码如下 04. 05. private void n ...

  8. Install MySQL on Mac by Homebrew

    1.  安装mysql brew update brew install mysql 2. 启动mysql mysql.server start 3. 登录mysql mysql -uroot -p ...

  9. kibana使用操作部分

      1.kibana的概念及特点. 概念:数据可视化平台工具 特点: - 灵活的分析和可视化平台 - 实时总结和流数据的图表 - 为不同的用户显示直观的界面 - 即时分享和嵌入的仪表板   2.kib ...

  10. js插入拼接链接 --包含可变字段

    // newsId: 传参过来的Id, pathIdlet newsDetailId = parseInt(this.props.newsId); goTo() { window.location.h ...