php的闭包(Closure)匿名函数用法详解
2017-10-09 10:37
731 查看
php的闭包(Closure)也就是匿名函数,是PHP5.3引入的。
闭包的语法很简单,需要注意的关键字就只有use,use是连接闭包和外界变量。
$arg = 'text';
$test = function () use ($arg){
var_dump($arg);
};
$test();//输出text
匿名函数的定义:
eg: 把匿名函数赋值给变量,通过变量来调用
输出: hello world!
二:闭包
将匿名函数放在普通函数中,也可以将匿名函数返回,这就构成了一个简单的闭包
在匿名函数中引用局部变量
上面的函数运行后,会报Notice错误,说明我们不能在匿名函数中这样使用局部变量,这时候就要引用一个php的关键字 use, 代码如下
返回匿名函数
当我们在返回匿名函数时候怎么给匿名函数传参呢? 其实跟普通函数传参数一样
怎么用闭包来改变上下文引用的变量值?
看上面的输入结果,显然没有达到目的, 其实只要加一个 & 引用符号就可以了
把匿名函数当作参数传递
闭包的语法很简单,需要注意的关键字就只有use,use是连接闭包和外界变量。
$arg = 'text';
$test = function () use ($arg){
var_dump($arg);
};
$test();//输出text
匿名函数的定义:
$closureFunc = function(){ .... };
eg: 把匿名函数赋值给变量,通过变量来调用
$closureFunc = function($str){ echo $str; }; $closureFunc("hello world!");
输出: hello world!
二:闭包
将匿名函数放在普通函数中,也可以将匿名函数返回,这就构成了一个简单的闭包
function closureFunc1(){ $func = function(){ echo "hello"; }; $func(); } closureFunc1(); //输出: hello
在匿名函数中引用局部变量
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
返回匿名函数
function closureFunc3(){ $num = 1; $func = function() use($num){ echo $num; }; return $func; } $func = closureFunc3(); //函数返回匿名函数 $func(); //然后我们在用$func() 调用 //输出: 1
当我们在返回匿名函数时候怎么给匿名函数传参呢? 其实跟普通函数传参数一样
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
怎么用闭包来改变上下文引用的变量值?
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
把匿名函数当作参数传递
function callFunc($func){ $func("argv"); } callFunc(function($str){ echo $str; }) //输出: // argv
相关文章推荐
- php中的匿名函数和闭包(closure)用法
- php的闭包(Closure)匿名函数详解
- php的闭包(Closure)匿名函数详解
- php的闭包(Closure)也就是匿名函数。是PHP5.3引入的。
- php中的匿名函数和闭包(closure)
- php的闭包(Closure)匿名函数初探
- php中的匿名函数和闭包(closure)及use的作用
- PHP闭包(Closure)使用详解
- php的闭包(Closure)匿名函数初探
- php中的匿名函数和闭包(closure)
- php的闭包(Closure)也就是匿名函数。
- php中的匿名函数和闭包(closure)
- php的闭包(Closure)也就是匿名函数。是PHP5.3引入的。
- php 中的closure用法详解
- PHP闭包(Closure)使用详解
- PHP闭包(Closure)使用详解
- php的闭包(Closure)也就是匿名函数。是PHP5.3引入的。
- php中的匿名函数和闭包(closure)
- PHP闭包(Closure)使用详解
- php 闭包, 匿名函数