您好,欢迎访问一九零五行业门户网

php 5.3 闭包语法介绍 function() use() {}_PHP教程

php 5.3 加入了闭包语法,也就是匿名函数,允许开发者申明行内函数和在变量中保存。虽然这个语法和javascript的闭包相比有点怪异,但是对于php语言来说,这是一个良好的补充
 代码如下 复制代码
scalar}.
/n;
};
$obj = (object) hello, everybody;
callback($callback);
//输出: this is a closure use object, msg is: hello, everybody.
/n
//还是按照上面的步骤, 按部就班的来吧:
//1. obj名字指向hello, everyone对象
//2. 闭包产生一个引用指向hello, everyone对象
//3. 修改obj名字指向的对象(即hello, everyone对象)的scalar值
//4. 执行闭包, 输出的自然是hello, everybody, 因为其实只有一个真正的对象
$obj = (object) hello, everyone;
$callback = function () use ($obj) {
print this is a closure use object, msg is: {$obj->scalar}.
/n;
};
$obj->scalar = hello, everybody;
callback($callback);
//输出: this is a closure use object lazy bind, msg is: hello, everybody.
/n
//闭包引用的是什么呢? &$obj, 闭包产生的引用指向$obj这个名字所指向的地址.
//因此, 无论obj怎么变化, 都是逃不脱的....
//所以, 输出的就是改变后的值
$obj = (object) hello, everyone;
$callback = function () use (&$obj) {
print this is a closure use object lazy bind, msg is: {$obj->scalar}.
/n;
};
$obj = (object) hello, everybody;
callback($callback);
/**
* 一个利用闭包的计数器产生器
* 这里其实借鉴的是python中介绍闭包时的例子...
* 我们可以这样考虑:
*         1. counter函数每次调用, 创建一个局部变量$counter, 初始化为1.
*         2. 然后创建一个闭包, 闭包产生了对局部变量$counter的引用.
*         3. 函数counter返回创建的闭包, 并销毁局部变量, 但此时有闭包对$counter的引用,
*             它并不会被回收, 因此, 我们可以这样理解, 被函数counter返回的闭包, 携带了一个游离态的
*             变量.
*         4. 由于每次调用counter都会创建独立的$counter和闭包, 因此返回的闭包相互之间是独立的.
*         5. 执行被返回的闭包, 对其携带的游离态变量自增并返回, 得到的就是一个计数器.
* 结论: 此函数可以用来生成相互独立的计数器.
*/
function counter() {
$counter = 1;
return function() use(&$counter) {return $counter ++;};
}
$counter1 = counter();
$counter2 = counter();
echo counter1: . $counter1() .
/n;
echo counter1: . $counter1() .
/n;
echo counter1: . $counter1() .
/n;
echo counter1: . $counter1() .
/n;
echo counter2: . $counter2() .
/n;
echo counter2: . $counter2() .
/n;
echo counter2: . $counter2() .
/n;
echo counter2: . $counter2() .
/n;
?>
http://www.bkjia.com/phpjc/628696.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/628696.htmltecharticlephp 5.3 加入了闭包语法,也就是匿名函数,允许开发者申明行内函数和在变量中保存。虽然这个语法和javascript的闭包相比有点怪异,但是对...
其它类似信息

推荐信息