美文网首页
PHP 闭包

PHP 闭包

作者: dongshixiao | 来源:发表于2018-03-24 09:11 被阅读0次

闭包和匿名函数在php5.3中引入,闭包是指的创建时封装周围状态的函数,即便闭包所在的环境不存在了,闭包中封装的状态依然存在.匿名函数特别适合作为函数或方法回调.

首先举一个创建闭包函数,并用use关键字来附加闭包的状态 的demo:

function close($english_name)
{
    return function ($real_name) use ($english_name) {
        return $english_name . ":" . $real_name;
    };
}
$close = close('season');//把字符串season封装在闭包中
echo $close('董');//传入参数 调用闭包

output:

season:董

首先调用close函数,需要一个$english_name的参数,这个函数返回了一个闭包对象,
这个对象有一个bindTo()方法,和__invoke()的魔术方法.
而且这个闭包封装了$english_name参数.即使跳出了close()函数的作用域,他还是会
保存$english_name的值.(在类中以静态属性存放).

下面的demo演示bindTo()方法的用法:

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 dispath($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();
//每个闭包实例都可以使用$this关键字来获取闭包内部状态
$app->addRoute('/user/season',function (){
    $this->responseContentType = 'application/json;charset=utf8';
    $this->responseBody = '{"name":"season"}';
});

$app->dispath('/user/season');

注意addRoute()方法,这个方法的参数是一个路由路径和一个路由回调.
dispath()方法的参数是当前http请求的路径,他调用匹配的路由回调.

相关文章

  • php之闭包函数(Closure)

    php闭包函数(Closure) JS闭包 js和php闭包使用和区别

  • Modern PHP : 闭包和匿名函数

    Modern PHP : 闭包和匿名函数

  • PHP闭包

    一. 闭包函数又叫做匿名函数(没有函数名称的函数). 英文closure 匿名函数常在js函数中出现,比如ajax...

  • PHP 闭包

    闭包和匿名函数在php5.3中引入,闭包是指的创建时封装周围状态的函数,即便闭包所在的环境不存在了,闭包中封装的状...

  • php闭包

    在公众号中看到闭包的概念,其实就是结合匿名函数的运用,稍微总结一下用法: 3中简单的闭包使用情况:* 在函数里定义...

  • PHP新特性之闭包、匿名函数

    闭包 闭包是什么? 1).闭包和匿名函数在PHP5.3中被引入。2).闭包是指在创建时封装函数周围状态的函数,即使...

  • PHP闭包实现

    闭包是指在创建时封装周围状态的函数。即使闭包所在的环境不在了,闭包中封装的状态依旧存在。注意在php中匿名函数=闭...

  • PHP闭包的理解是使用

    PHP 闭包函数及Closure对象的总结 PHP的闭包 其实学习一个新的概念,除了知道怎么使用,更多的我是想知道...

  • php闭包函数(Closure)

    匿名函数 提到闭包就不得不想起匿名函数,也叫闭包函数(closures),貌似PHP闭包实现主要就是靠它。声明一个...

  • PHP闭包(Closure)初探

    匿名函数 提到闭包就不得不想起匿名函数,也叫闭包函数(closures),貌似PHP闭包实现主要就是靠它。声明一个...

网友评论

      本文标题:PHP 闭包

      本文链接:https://www.haomeiwen.com/subject/kzqaqftx.html