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"}

  

原文地址:https://www.cnblogs.com/mingzhanghui/p/9314182.html

时间: 2024-10-17 05:16:10

modern php closure 闭包的相关文章

javascript Closure 闭包

引用自 http://www.cnblogs.com/mguo/archive/2013/06/19/3143880.html /*一.变量的作用域要理解闭包,首先必须理解Javascript特殊的变量作用域.变量的作用域无非就是两种:全局变量和局部变量.Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量.*/ var n=999; function f1(){ alert(n); } f1(); // 999//另一方面,在函数外部自然无法读取函数内的局部变量. funct

java 8 closure 闭包

在functional programming 里面经常提及closure 闭包. 那么究竟闭包是一个什么东东? 让人如何难以理解呢? 1 闭包定义 closure is an instance of a function that can reference nonlocal variables of that function with no restrictions.这是闭包的英文定义.说实在这段定义确实很抽象让人难以理解. 然后我这里其实有两个点把这段定义具体化: 1.1. 闭包就是允许

【Javascript 拾遗之三】 Closure 闭包

说起闭包这个概念,其实是离散数学中的一种定义,而很程序员们耳熟能详但不一定能说清楚它的含义和用途.本文先简单地介绍下离散数学中的闭包,然后再探讨一下Javascript语言中的闭包是如何创建和应用的. Closure 闭包 1.闭包的定义 -离散数学 一个关系不具有自反, 对称, 传递这3种基本性质之一,但均可以通过对该关系的扩充(在关系中增添序偶),使扩充后的关系具有这种性质,这种包含该关系的最小扩充称为该关系关于这种性质的闭包. 下面给出闭包的定义:设R是X上的关系,R的自反(或对称,传递)

PHP Closure(闭包)类详解

Closure 面向对象变成语言代码的复用主要采用继承来实现,而函数的复用,就是通过闭包来实现.这就是闭包的设计初衷. 注:PHP里面闭包函数是为了复用函数而设计的语言特性,如果在闭包函数里面访问指定域的变量,使用use关键字来实现. PHP具有面向函数的编程特性,但是也是面向对象编程语言,PHP 会自动把闭包函数转换成内置类 Closure 的对象实例,依赖Closure 的对象实例又给闭包函数添加了更多的能力. 闭包不能被实例(私有构造函数),也不能被继承(finally 类).可以通过反射

access to modified closure 闭包的问题

for (int i = 0; i < listBoxDevices.Items.Count; i++) { var tempDeviceId = listBoxDevices.Items[i].ToString(); if (tempDeviceId.Contains("(掉线)")) { var id = GlobalConvert.GetDeviceID(tempDeviceId.Replace("(掉线)", string.Empty)); if (i

ES3之closure ( 闭包 )

闭包是函数和声明该函数的词法环境的组合. JavaScript中的函数会形成闭包. 闭包是由函数以及创建该函数的词法环境组合而成.这个环境包含了这个闭包创建时所能访问的所有局部变量. function playGame(){ var name = 'Ace Combat'; function playGame_(){ console.log('[play game]',name); } return playGame_; } var play = playGame(); play(); 创建多个

[Modern PHP] 第二章 新特性之五 闭包

闭包 闭包和匿名函数是从PHP 5.3.0开始出现的,这是我最喜欢也是用的最多的PHP功能.听到这些名称心里特别没底(至少我第一次听到时是这么认为的),但是事实上真的很好理解.它们是每个PHP开发者们的工具箱中必备的最有用的工具. 闭包作为一个函数,在创建时会封装外部的状态.即使最初创建闭包时的环境已经不存在了,封装的状态也会一直保存在闭包中.这是一个不太好掌握的概念,一旦你能够弄明白,感觉就像人生翻开了新的篇章. 匿名函数实际上就是没有名字的函数.匿名函数可以被赋值给变量,像所有其它的PHP对

Swift:闭包

一.闭包的介绍 闭包表达式(Closure Expressions) 尾随闭包(Trailing Closures) 值捕获(Capturing Values) 闭包是引用类型(Closures Are Reference Types) 闭包是自包含的函数代码块,可以在代码中被传递和使用. Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其他一些编程语言中的 lambdas 函数比较相似. 闭包可以捕获和存储其所在上下文中任意常量和变量的引用. 这就是所谓的

JavaScript从作用域到闭包

作用域(scope) 全局作用域和局部作用域 通常来讲这块是全局变量与局部变量的区分. 参考引文:JavaScript 开发进阶:理解 JavaScript 作用域和作用域链 全局作用域:最外层函数和在最外层函数外面定义的变量拥有全局作用域. 1)最外层函数和在最外层函数外面定义的变量拥有全局作用域 2)所有末定义直接赋值的变量自动声明为拥有全局作用域,即没有用var声明的变量都是全局变量,而且是顶层对象的属性. 3)所有window对象的属性拥有全局作用域 局部作用域:和全局作用域相反,局部作