闭包是指在创建时封装周围状态的函数,即使闭包所在的环境的不存在了,闭包中封装的状态依然存在。

匿名函数其实就是没有名称的函数,匿名函数可以赋值给变量,还能像其他任何PHP函数对象那样传递。不过匿名函数仍然是函数,因此可以调用,还可以传入参数,适合作为函数或方法的回调。

php5.3加入了闭包的新特性,把匿名函数和闭包等同对待,就是匿名函数也叫闭包。

php的闭包经常用作回调函数,array_map,array_walk,preg_replace_callback函数等

面向对象对代码的复用是通过继承来实现,面向函数的代码复用是通过函数的嵌套(子函数)实现的 个人认为闭包函数的目的就是实现 函数复用

php是面向函数 面向对象的语言,会自动把闭包函数转成内置类 closure的对象实例  closure类有很多功能去给闭包使用

匿名函数用作动态创建函数,保存到变量

$func = function(){exit('hello world!');

}

echo $func();

closure内置类实现了__invoke方法,直接使用变量调用闭包触发__invoke方法

状态附加

php实现状态附加到闭包函数上使用use关键字和closure的 bindto方法,PHP框架经常使用bindTo()方法把路由URL映射到匿名回调函数上

classApp

{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($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('/user/nesfo', function () {

$this->responseContentType = 'application/json; charset=utf8';

$this->responseBody = '{"name": "nesfo"}';

});

$app->dispatch('/user/nesfo');

php的闭包函数bingto_php的闭包相关推荐

  1. php的闭包函数bingto_PHP 闭包那点事儿

    匿名函数 匿名函数,也叫闭包函数,说白了就是"没有名字的函数",和一般函数结构一样,只是少了函数名以及最后需要加上分号;. 注:理论上讲闭包和匿名函数是不同的概念,不过PHP将其视 ...

  2. python中闭包函数_Python的闭包问题(关于内嵌函数引用闭包函数的变量问题)

    一.闭包: 记得:闭包的特性就是:内嵌函数会保存它引用的外围函数的变量值. 闭包概念:在一个内部函数中,对外部作用域的变量进行引用,(并且一般外部函数的返回值为内部函数),那么内部函数和被引用的变量等 ...

  3. python 返回函数对象_Python—函数对象与闭包

    一 函数对象 函数对象指的是函数可以被当做"数据"来处理,具体可以分为四个方面的使用. 1.1 函数可以被引用 def index(): print('from index') a ...

  4. 闭包函数 装饰器 迭代器

    闭包函数 一.什么是闭包 闭包:闭是封闭(函数内部函数),包是包含(该内部函数对外部作用域而非全局作用域的变量的引用).闭包指的是:函数内部函数对外部作用域而非全局作用域的引用.简单的说闭包函数就是把 ...

  5. 好好学python·函数进阶(递归函数,回调函数,闭包函数,匿名函数,迭代器)

    函数进阶 递归函数 回调函数 闭包函数 特点 匿名函数 lambda 表达式 迭代器 iter() next() 迭代器的取值方案 迭代器取值特点,取一个少一个,直到都取完,最后再获取就会报错 检测迭 ...

  6. python中msg函数_Python 中闭包函数和装饰器

    一.闭包函数的概述 闭包 closure, 是一种代码的组织结构.当一个内嵌函数引用其外部作用域的变量,就形成一个闭包函数.闭包函数有一个内嵌函数,内嵌函数引用外部函数中的变量,外部函数的返回值是内嵌 ...

  7. 编程高手之路——闭包函数

    目录 一.函数嵌套调用 1.1函数嵌套调用 1.2 函数嵌套定义 二.名称空间 2.1 名称空间说明 2.2 名称空间的分类 三.作用域 3.1 变量作用域 3.1.1 参数名称的另一种定义形式: 3 ...

  8. python 函数可以作为容器对象的元素_14、函数对象和闭包

    目录:一 函数对象1.1 函数可以被引用 1.2 函数可以作为容器类型的元素 1.3 函数可以作为参数传入另外一个函数 1.4 函数的返回值可以是一个函数 二 闭包函数2.1 闭与包 2.2 闭包的用 ...

  9. python函数装饰嵌套_python3--函数名本质,函数嵌套,闭包,装饰器

    python函数的嵌套和作用域链 函数的嵌套调用def max2(x,y): m = x if x > y else y  # 三元运算 return m def max4(a,b,c,d): ...

最新文章

  1. python中字典和集合的区别_Python中字典和集合学习小结
  2. iphone双卡_不吹不黑,今年的四款iPhone到底谁最值得买?
  3. java----java工具包
  4. TP的中间件:过滤处理HTTP的请求与响应
  5. ffplay命令汇总
  6. 50行 koa-compose,面试常考的中间件原理原来这么简单?
  7. Ubuntu16.04LTS修改开机动画
  8. 记录linux启动次数的脚本,类UNIX系统中启动脚本记录
  9. 19 矩阵——矩阵的相抵、相抵标准形、秩1矩阵、矩阵的满秩分解
  10. Linux 常用的命令
  11. allegro转AD教程
  12. inode服务器与响应,inode客户端服务器下线请求和
  13. Industry工业软件开发平台设计A-1
  14. C51最小单片机系统
  15. 用java制作扑克牌_Java程序设计之扑克牌
  16. 博世传感器BMM150数据读取
  17. pycharm使用pip install xxx 解决超时问题
  18. PHP生成微信小程序码
  19. windows的局域网渗透
  20. 2010年考研英语一阅读A题翻译加解析

热门文章

  1. java jui 正则表达式_正则表达式-Gorilla City-51CTO博客
  2. tensorflow2.1学习--熟悉TensorFlow写整个项目即鸢尾花项目
  3. NLP --- 条件随机场CRF详解
  4. 微信公众号接入百度天气API接口
  5. php更改二维数组的键,学习猿地-php如何修改二维数组的键名
  6. php自动提交百度收录,wordpress站点如何自动提交百度收录
  7. java轻量级和重量级_Java 偏向锁、轻量级锁和重量级锁
  8. lnk200无法解析的外部符号_语义解析
  9. JSTL-格式标签库
  10. GNU make manual 翻译( 一百二十四)