PHP 5.3 加入了闭包语法,也就是匿名函数,允许开发者申明行内函数和在变量中保存.虽然这个语法和JavaScript的闭包相比有点怪异,但是对于PHP语言来说,这是一个良好的补充.
实例代码如下:
- <?php
-
-
-
- function callback($callback) {
- $callback();
- }
-
-
-
-
- callback(function() {
- print "This is a anonymous function.<br />/n";
- });
-
-
-
-
-
-
-
- $msg = "Hello, everyone";
- $callback = function () use ($msg) {
- print "This is a closure use string value, msg is: $msg. <br />/n";
- };
- $msg = "Hello, everybody";
- callback($callback);
-
-
-
-
-
- $msg = "Hello, everyone";
- $callback = function () use (&$msg) {
- print "This is a closure use string value lazy bind, msg is: $msg. <br />/n";
- };
- $msg = "Hello, everybody";
- callback($callback);
-
-
-
-
-
-
-
- $obj = (object) "Hello, everyone";
- $callback = function () use ($obj) {
- print "This is a closure use object, msg is: {$obj->scalar}. <br />/n";
- };
- $obj = (object) "Hello, everybody";
- callback($callback);
-
-
-
-
-
-
- $obj = (object) "Hello, everyone";
- $callback = function () use ($obj) {
- print "This is a closure use object, msg is: {$obj->scalar}. <br />/n";
- };
- $obj->scalar = "Hello, everybody";
- callback($callback);
-
-
-
-
- $obj = (object) "Hello, everyone";
- $callback = function () use (&$obj) {
- print "This is a closure use object lazy bind, msg is: {$obj->scalar}. <br />/n";
- };
- $obj = (object) "Hello, everybody";
- callback($callback);
-
-
-
-
-
-
-
-
-
-
-
-
-
- function counter() {
- $counter = 1;
- return function() use(&$counter) {return $counter ++;};
- }
- $counter1 = counter();
- $counter2 = counter();
- echo "counter1: " . $counter1() . "<br />/n";
- echo "counter1: " . $counter1() . "<br />/n";
- echo "counter1: " . $counter1() . "<br />/n";
- echo "counter1: " . $counter1() . "<br />/n";
- echo "counter2: " . $counter2() . "<br />/n";
- echo "counter2: " . $counter2() . "<br />/n";
- echo "counter2: " . $counter2() . "<br />/n";
- echo "counter2: " . $counter2() . "<br />/n";
- ?>
|