PHP匿名函数(闭包函数)

来源:互联网 发布:中国保险保险网络大学 编辑:程序博客网 时间:2024/05/16 14:34
php的闭包(Closure)也就是匿名函数。是PHP5.3引入的。
闭包的语法很简单,需要注意的关键字就只有use,use意思是连接闭包和外界变量。
什么是闭包函数:
1、常规函数:
function functionname($a,$b){
return $a+$b;
} //可以没有分号
2、变量函数:
function functionname($a,$b){
return $a+$b;
} //可以没有分号
$var = "functionname";
echo $var(1,2);
var_dump($var); //字符串
3、匿名函数
$var = function(){
}; //一定要加分号
可以有参数,有返回值;
$var = function($a,$b){
return $a+$b;
};
var_dump($var); //对象
调用:
echo $var($a,$b);
用法:
1、替代变量函数。(参考上面2和3)
2、PHP闭包实现,主要依靠匿名函数
什么是闭包:子函数可以使用父函数的局部变量,这种行为叫做闭包!
下面来几个例子,了解一下闭包的含义;
1.
<?php
$a = 0;
function one(){
$a = 1;
$var = function($b){
echo $a;
echo $b;
};
$var('cccccc');
}
one();
//提示,$a未定义;
2.
<?php
$a = 0;
function one(){
$a = 1;
$var = function($b){
global$a;
echo $a;
echo $b;
};
$var('cccccc');
}
one();
//0cccccc 访问函数外面的$a,而不是父函数中的局部变量$a;
3.
<?php
$a = 0;
function one(){
$a = 1;
$var = function($b)use($a){
echo $a;
echo $b;
};
$var('cccccc');
}
one();
//1cccccc 使用use,访问父函数中的$a;
4.闭包函数中’&‘的使用,实现子函数与父函数变量同步。
没使用’&‘
<?php
$a = 0;
function one(){
$a = 1;
$var = function($b)use($a){
$a++;
echo $a;
echo $b;
};
$var('cccccc');
echo $a;
}
one();
//2cccccc1
使用’&‘
<?php
$a = 0;
function one(){
$a = 1;
$var = function($b)use(&$a){
$a++;
echo $a;
echo $b;
};
$var('cccccc');
echo $a;
}
one();
//2cccccc2
保护函数内的变量安全——外层函数中的变量只有内部函数可以访问到。
在内存中维持一个变量,由于闭包,外层函数中的变量一直存在于内存中,因此每次执行都会使用到。
<?php
$a = 0;
function one(){
$a = 1;
$var = function($b)use(&$a){
$a++;
echo $a;
echo $b;
};
$var('cccccc');
echo $a;
}
one();one();one();
//2cccccc2
//3cccccc3
//4cccccc4

原创粉丝点击