1.闭包 bindTo 绑定
<?php
/**
* Created by PhpStorm.
* User: Itboot
* Date: 2019/1/16
* Time: 13:33
*/
class App
{
protected $routes = array();
protected $responseStatus = '200 OK';
protected $responseContentType = 'text/html';
protected $responseBody = 'Hello world';
public function addRoute($routPath, $routeCallback) {
$this->routes[$routPath] = $routeCallback->bindTo($this, __CLASS__);
}
public function dispatch($currentPath) {
foreach ($this->routes as $routePath => $callback) {
if ($routePath === $currentPath) {
$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/json', function (){
$this->responseContentType = 'appliction/json;charset=utf8';
$this->responseBody = '{"name":"mawh"}';
});
$app->dispatch('/users/json');
2.闭包 use的使用
function encloscpo($name, $hh) {
return function ($addCommand) use ($name, $hh) {
return sprintf('%s, %s, %s', $name, $addCommand, $hh);
};
}
//把mawh 封装在闭包中
$fun = encloscpo("mawh", '!!!!!!!!');
//传入参数 ,执行闭包
echo $fun('hello');
3.闭包在函数中的使用
$arr = [8, 9, 100];
$numbersPlusOne = array_map(function($number) {
return $number * 2;
}, $arr);
print_r($numbersPlusOne);