modern php closure 闭包

Posted mingzhanghui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了modern php closure 闭包相关的知识,希望对你有一定的参考价值。

* 在array_map()函数中使用闭包

<?php

$numbersPlusOne = array_map(function($number) {
   return $number + 1;
}, [1,2,3]);
print_r($numbersPlusOne);

  

$ php numbersPlusOne.php

  

Array
(
[0] => 2
[1] => 3
[2] => 4
)

* 使用use关键字附加闭包的状态

<?php

function enclosePerson($name) {
    // use 可以把多个参数传入闭包
    return function($doCommand) use ($name) {
        return sprintf(‘%s, %s‘.PHP_EOL, $name, $doCommand);
    };
}

$clay = enclosePerson(‘Clay‘);

echo $clay(‘get me some sweet tea!‘);

  Clay, get me some sweet tea!

 

* 使用bindTo方法附加闭包的状态

<?php

class App {
    protected $routes = [];
    protected $responseStatus = ‘200 OK‘;
    protected $responseContentType = ‘text/html‘;
    protected $responseBody = ‘Hello world‘;

    public function addRoute($routePath, $routeCallBack) {
        $this->routes[$routePath] = $routeCallBack->bindTo($this, __CLASS__);
    }

    public function dispatch($currrentPath) {
        foreach ($this->routes as $routePath => $callback) {
            if ($routePath === $currrentPath) {
                $callback();
            }
        }
        header(‘HTTP/1.1 ‘, $this->responseStatus);
        header(‘Content-Type: ‘, $this->responseContentType);
        header(‘Content-length: ‘, mb_strlen($this->responseBody));
        echo $this->responseBody;
    }
}

$app = new App();
$app->addRoute(‘/users/josh‘, function() {
    $this->responseContentType = ‘application/json; charset=utf8‘;
    $this->responseBody = ‘{"name": "Josh"}‘;
});

$app->dispatch(‘/users/josh‘);
echo PHP_EOL;
// {"name": "Josh"}

  

 






以上是关于modern php closure 闭包的主要内容,如果未能解决你的问题,请参考以下文章

PHP Closure(闭包)类详解

PHP Closure(闭包)类详解

PHP Closure(闭包)类详解

查看 PHP 闭包的源代码

php的闭包(Closure)也就是匿名函数。是PHP5.3引入的。

php匿名函数和闭包函数及use关键字传参及Closure匿名函数类