当前位置:网站首页>PHP闭包函数 bingTo的使用
PHP闭包函数 bingTo的使用
2022-08-08 23:20:00 【张康佳】
前言
提示:关于闭包函数附加状态的使用。
一、闭包函数是什么?
说明:闭包函数其实就是没有名称的函数。特性:闭包函数是创建时封装周围状态的函数。即便闭包所在的环境不存在了,闭包中封装的状态依然存在。
建议先看一下官方手册:[PHP.net传送门](https://www.php.net/manual/zh/functions.anonymous.php)
二、高级玩法-bingTo()
基本用法见手册,就不展示了,这里直接上一个高级玩法
1.bingTo()说明
使用 bingTo() 方法可以把 Closure 对象的内部状态绑定到其他对象上。简而言之,就是绑定闭包所属的PHP类,这样闭包就可以在其他地方访问绑定闭包的对象中受保护和私有的成员变量。
2.示例 (来源 《Moderm PHP》)
先书写 PHP 类:
class App {
protected $routes = [];
protected $responseStatus = '200 OK';
protected $responseContentType = 'text/html';
protected $responseBody = 'Hello World';
public function addRoute($path, $callback) {
//这里将用户传递的 匿名函数 绑定了 APP
$this->routes[$path] = $callback->bindTo($this, __CLASS__);
}
public function dispatch($path) {
foreach ($this->routes as $routePath => $callback) {
if( $routePath === $path) {
$callback();
}
}
header('HTTP/1.1 ' . $this->responseStatus);
header('Content-Type: ' . $this->responseContentType);
header('Content-Length: ' . mb_strlen($this->responseBody));
echo $this->responseBody;
}
}
```php
$app = new App();
$app->addRoute('users/josh', function(){
//由于上方绑定了 App, 所以这里可以放到到 APP 中受保护的文件
$this->responseContentType = 'application/json;charset=utf8';
$this->responseBody = '{"name":"Josh"}';
})
$app->dispatch('users/josh');
边栏推荐
- (2022杭电多校三)1011.Taxi(曼哈顿最值+二分)
- 【Verilog基础】关于芯片中信号串扰的理解
- 【CUDA】version switch freely
- Kubernetes资源编排系列之四: CRD+Operator篇
- stm32 利用 串口接收空闲中断 + dma 实现不定长度dma 接收
- Use Mongoose populate to implement multi-table associative storage and query, with complete code included
- [Pytorch] Study Notes (1)
- (2022牛客多校三)A-Ancestor(LCA)
- Taro小程序跨端开发入门实战
- word文档标题怎么自动编号?
猜你喜欢
(2022杭电多校六)1010-Planar graph(最小生成树)
meta learning
Manacher(求解最长回文子串)
(2022杭电多校六)1012-Loop(单调栈+思维)
(2022牛客多校五)B-Watches(二分)
A preliminary study on the use of ndk and JNI
Use Mongoose populate to implement multi-table associative storage and query, with complete code included
线性筛求积性函数
2021 RoboCom 世界机器人开发者大赛-本科组(决赛)7-1绿色围栏(模拟)
[YOLOv5] 6.0 environment construction (updated from time to time)
随机推荐
(newcoder 15079)无关(容斥原理)
从stm32移植ucos2的代码到GD32
MPLS Virtual Private Network Everywhere in Life
[Tensorflow2] Some interface changes of tensorflow1.x-tensorflow2.x
(2022杭电多校六)1010-Planar graph(最小生成树)
STM8L LCD digital tube driver, thermometer LCD display
(2022杭电多校三)1009.Package Delivery(贪心)
(2022牛客多校四)N-Particle Arts(思维)
flutter 书写json解析类
wps表格下拉选项怎么添加?wps表格下拉选项的添加方法
[PP-YOLOv2] Test a custom dataset
JS中的预编译(AO、GO详解)
wps表格怎么调整表格大小?wps表格调整表格大小的方法
待完善:tf.name_scope() 和 tf.variable_scope()的区别
Virtual router redundancy protocol VRRP - double-machine hot backup
Python object-oriented
ViewOverlay与ViewGroupOverlay
容斥原理
2022牛客多校六 M-Z-Game on grid(动态规划)
(2022杭电多校六)1012-Loop(单调栈+思维)