- <?php
- /**
- * author: selfimpr
- * mail: lgg860911@yahoo.com.cn
- * blog: http://blog.csdn.net/lgg201
- * 下面提到的代码在PHP5.3以上版本运行通过.
- */
- function callback($callback) {
- $callback();
- }
- //输出: This is a anonymous function.<br />
- //这里是直接定义一个匿名函数进行传递, 在以往的版本中, 这是不可用的.
- //现在, 这种语法非常舒服, 和javascript语法基本一致, 之所以说基本呢, 需要继续向下看
- //结论: 一个舒服的语法必然会受欢迎的.
- callback(function() {
- print "This is a anonymous function.<br /> ";
- });
- //输出: This is a closure use string value, msg is: Hello, everyone.<br />
- //这里首先定义了一个闭包, 这次户口本上有名字了...
- //use, 一个新鲜的家伙...
- //众所周知, 闭包: 内部函数使用了外部函数中定义的变量.
- //在PHP新开放的闭包语法中, 我们就是用use来使用闭包外部定义的变量的.
- //这里我们使用了外部变量$msg, 定义完之后, 又对其值进行了改变, 闭包被执行后输出的是原始值
- //结论: 以传值方式传递的基础类型参数, 闭包use的值在闭包创建是就确定了.
- $msg = "Hello, everyone";
- $callback = function () use ($msg) {
- print "This is a closure use string value, msg is: $msg. <br /> ";
- };
- $msg = "Hello, everybody";
- callback($callback);
- //输出: This is a closure use string value lazy bind, msg is: Hello, everybody.<br />
- //换一种引用方式, 我们使用引用的方式来use
- //可以发现这次输出是闭包定义后的值...
- //这个其实不难理解, 我们以引用方式use, 那闭包use的是$msg这个变量的地址
- //当后面对$msg这个地址上的值进行了改变之后, 闭包内再输出这个地址的值时, 自然改变了.
- $msg =