## 为什么单独创建一个Response?
跟`为什么要单独创建一个Request` 一样。
原因: 可以管理
如: 在 `swoole` 不应该用 `echo`, 因为 `swoole` 是 `cli` 运行,只会输出在命令行。
`必须` 只有一个地方能 `输出响应` 就是此篇的功能
确保有 `集中控制权` 是非常重要 !
(后面代码有 `echo` 都是不规范的, 应该调用 `此篇` 的功能)
## 创建core/Response.php
```
<?php
namespace core;
class Response
{
protected $headers = []; // 要发送的请求头
protected $content = ''; // 要发送的内容
protected $code = 200; // 发送状态码
public function sendContent() // 发送内容
{
echo $this->content;
}
public function sendHeaders() // 发送请求头
{
foreach ($this->headers as $key => $header)
header($key.': '.$header);
}
public function send() // 发送
{
$this->sendHeaders();
$this->sendContent();
return $this;
}
public function setContent($content) // 设置内容
{
if( is_array($content))
$content = json_encode($content);
$this->content = $content;
return $this;
}
public function getContent() // 获取内容
{
return $this->content;
}
public function getStatusCode() // 获取状态码
{
return $this->code;
}
public function setCode(int $code) // 设置状态码
{
$this->code = $code;
return $this;
}
}
```
## 在容器绑定Response类
编辑 `app.php`的`register` 方法
![](https://img.kancloud.cn/f0/ad/f0ad878555ff9efa213a1c6011f7c17e_606x187.png)
## 编辑index.php
![](https://img.kancloud.cn/56/90/5690de0edbfdf9f0665cdaf48566e739_824x519.png)
![](https://img.kancloud.cn/06/3b/063bb94f40ec4253318fc802cdfef561_612x175.png)
- 前言
- 基础篇
- 1. 第一步 创建框架目录结构
- 2. 引入composer自动加载
- 3. php自动加载 (解释篇)
- 4. 创建容器 注册树模式
- 5. 关于psr规范解释
- 6. 关于"容器" "契约" "依赖注入" (解释篇)
- 7. 添加函数文件helpers.php
- 8. 初始化请求(Request)
- 9. 响应 (Response)
- 10. 路由一 (路由组实现)
- 11. 路由二 (加入中间件)
- 12. 配置信息 (类似laravel)
- 13. 数据库连接 (多例模式)
- 14. 查询构造器 (query builder)
- MVC实现
- M 模型实现 (数据映射 + 原型 模式)
- C 控制器实现 + 控制器中间件
- V 视图实现 (Laravel Blade 引擎)
- V 视图切换成 ThinkPhp 模板 引擎)
- 其他轮子
- 日志
- 自定义异常 (异常托管)
- 单元测试 (phpunit)
- 替换成swoole的http服务器
- 协程上下文解决request问题
- qps测试
- 发布到packagist.org