## MessageInterface 接口
### 3.1?`Psr\Http\Message\MessageInterface`
~~~php
<?php
namespace Psr\Http\Message;
/**
*
* HTTP 消息包括客戶端向服務器發起的「請求」和服務器端返回給客戶端的「響應」。
* 此接口定義了他們通用的方法。
*
* HTTP 消息是被視為無法修改的,所有能修改狀態的方法,都 **必須** 有一套
* 機制,在內部保持好原有的內容,然后把修改狀態后的信息返回。
*
* @see http://www.ietf.org/rfc/rfc7230.txt
* @see http://www.ietf.org/rfc/rfc7231.txt
*/
interface MessageInterface
{
/**
* 獲取字符串形式的 HTTP 協議版本信息。
*
* 字符串 **必須** 包含 HTTP 版本數字(如:「1.1」, 「1.0」)。
*
* @return string HTTP 協議版本
*/
public function getProtocolVersion();
/**
* 返回指定 HTTP 版本號的消息實例。
*
* 傳參的版本號只 **必須** 包含 HTTP 版本數字,如:"1.1", "1.0"。
*
* 此方法在實現的時候,**必須** 保留原有的不可修改的 HTTP 消息對象,然后返回
* 一個新的帶有傳參進去的 HTTP 版本的實例
*
* @param string $version HTTP 版本信息
* @return self
*/
public function withProtocolVersion($version);
/**
* 獲取所有的報頭信息
*
* 返回的二維數組中,第一維數組的「鍵」代表單條報頭信息的名字,「值」是
* 以數組形式返回的,見以下實例:
*
* // 把「值」的數據當成字串打印出來
* foreach ($message->getHeaders() as $name => $values) {
* echo $name . ': ' . implode(', ', $values);
* }
*
* // 迭代的循環二維數組
* foreach ($message->getHeaders() as $name => $values) {
* foreach ($values as $value) {
* header(sprintf('%s: %s', $name, $value), false);
* }
* }
*
* 雖然報頭信息是沒有大小寫之分,但是使用 `getHeaders()` 會返回保留了原本
* 大小寫形式的內容。
*
* @return string[][] 返回一個兩維數組,第一維數組的「鍵」 **必須** 為單條報頭信息的
* 名稱,對應的是由字串組成的數組,請注意,對應的「值」 **必須** 是數組形式的。
*/
public function getHeaders();
/**
* 檢查是否報頭信息中包含有此名稱的值,不區分大小寫
*
* @param string $name 不區分大小寫的報頭信息名稱
* @return bool 找到返回 true,未找到返回 false
*/
public function hasHeader($name);
/**
* 根據給定的名稱,獲取一條報頭信息,不區分大小寫,以數組形式返回
*
* 此方法以數組形式返回對應名稱的報頭信息。
*
* 如果沒有對應的報頭信息,**必須** 返回一個空數組。
*
* @param string $name 不區分大小寫的報頭字段名稱。
* @return string[] 返回報頭信息中,對應名稱的,由字符串組成的數組值,如果沒有對應
* 的內容,**必須** 返回空數組。
*/
public function getHeader($name);
/**
* 根據給定的名稱,獲取一條報頭信息,不區分大小寫,以逗號分隔的形式返回
*
* 此方法返回所有對應的報頭信息,并將其使用逗號分隔的方法拼接起來。
*
* 注意:不是所有的報頭信息都可使用逗號分隔的方法來拼接,對于那些報頭信息,請使用
* `getHeader()` 方法來獲取。
*
* 如果沒有對應的報頭信息,此方法 **必須** 返回一個空字符串。
*
* @param string $name 不區分大小寫的報頭字段名稱。
* @return string 返回報頭信息中,對應名稱的,由逗號分隔組成的字串,如果沒有對應
* 的內容,**必須** 返回空字符串。
*/
public function getHeaderLine($name);
/**
* 返回替換指定報頭信息「鍵/值」對的消息實例。
*
* 雖然報頭信息是不區分大小寫的,但是此方法必須保留其傳參時的大小寫狀態,并能夠在
* 調用 `getHeaders()` 的時候被取出。
*
* 此方法在實現的時候,**必須** 保留原有的不可修改的 HTTP 消息對象,然后返回
* 一個更新后帶有傳參進去報頭信息的實例
*
* @param string $name 不區分大小寫的報頭字段名稱。
* @param string|string[] $value 報頭信息或報頭信息數組。
* @return self
* @throws \InvalidArgumentException 無效的報頭字段或報頭信息時拋出
*/
public function withHeader($name, $value);
/**
* 返回一個報頭信息增量的 HTTP 消息實例。
*
* 原有的報頭信息會被保留,新的值會作為增量加上,如果報頭信息不存在的話,字段會被加上。
*
* 此方法在實現的時候,**必須** 保留原有的不可修改的 HTTP 消息對象,然后返回
* 一個新的修改過的 HTTP 消息實例。
*
* @param string $name 不區分大小寫的報頭字段名稱。
* @param string|string[] $value 報頭信息或報頭信息數組。
* @return self
* @throws \InvalidArgumentException 報頭字段名稱非法時會被拋出。
* @throws \InvalidArgumentException 報頭頭信息的值非法的時候會被拋出。
*/
public function withAddedHeader($name, $value);
/**
* 返回被移除掉指定報頭信息的 HTTP 消息實例。
*
* 報頭信息字段在解析的時候,**必須** 保證是不區分大小寫的。
*
* 此方法在實現的時候,**必須** 保留原有的不可修改的 HTTP 消息對象,然后返回
* 一個新的修改過的 HTTP 消息實例。
*
* @param string $name 不區分大小寫的頭部字段名稱。
* @return self
*/
public function withoutHeader($name);
/**
* 獲取 HTTP 消息的內容。
*
* @return StreamInterface 以數據流的形式返回。
*/
public function getBody();
/**
* 返回指定內容的 HTTP 消息實例。
*
* 內容 **必須** 是 `StreamInterface` 接口的實例。
*
* 此方法在實現的時候,**必須** 保留原有的不可修改的 HTTP 消息對象,然后返回
* 一個新的修改過的 HTTP 消息實例。
*
* @param StreamInterface $body 數據流形式的內容。
* @return self
* @throws \InvalidArgumentException 當消息內容不正確的時候拋出。
*/
public function withBody(StreamInterface $body);
}
~~~
- 前言
- 捐贈ESD項目
- 使用篇-通用
- 環境
- 安裝
- 規范
- 壓力測試
- 配置
- 如何設置YML配置
- server配置
- 端口配置
- 項目結構
- 事件派發
- 日志
- 注解
- DI容器
- 自定義進程
- 并發及協程池
- Console插件
- Scheduled插件
- Redis插件
- AOP插件
- Saber插件
- Mysql插件
- mysql事務
- Actuator插件
- Whoops插件
- Cache插件
- PHPUnit插件
- Security插件
- Session插件
- EasyRoute插件
- http路由
- ProcessRpc插件
- AutoReload插件
- AnnotationsScan插件
- Tracing-plugin插件
- MQTT插件
- Pack插件
- AMQP插件
- Validate插件
- Uid插件
- Topic插件
- Blade插件
- CsvReader插件
- hashed-wheel-timer-plugin插件
- 使用篇-HTTP
- 路由
- 靜態文件
- 路由定義
- 修飾方法
- 路由分組
- 資源路由
- 端口作用域
- 異常處理
- 跨域請求
- 路由緩存
- 控制器
- 控制器初始化
- 前置操作
- 跳轉和重定向
- 異常處理
- 請求
- 請求對象
- 請求信息
- request消息
- response消息
- stream消息
- url接口
- 驗證器
- 內置驗證器
- 內置過濾器
- 使用篇-WS
- 如何使用
- 路由
- 使用篇-TCP
- 插件篇-PluginSystem
- 微服務篇-ESDCloud
- CircuitBreaker插件
- SaberCloud插件
- 分布式鏈路追蹤系統
- Consul插件