hack-psr / psr7-http-message-hhi
PSR-7 的类型检查器定义
v1.0.1
2018-02-09 20:54 UTC
Requires
- psr/http-message: ^1.0
This package is auto-updated.
Last update: 2024-09-13 10:30:42 UTC
README
此存储库包含 PSR-7 中定义的接口的 .hhi 文件。它基于此处可用的 PHP 接口定义和注释。
https://github.com/php-fig/http-message
HHI 文件被 HHVM 忽略,但它们为类型检查器提供了有关接口的信息。这允许在运行时使用规范 PHP 接口,同时提供静态类型检查的好处。
安装
composer require hack-psr/psr7-http-message-hhi
注意
RequestInterface::getRequestTarget()
被标记为@return string
,然而这并不总是准确的,因为RequestInterface::withRequestTarget()
明确允许任何类型的请求目标,它必须逐字保留 - https://github.com/php-fig/http-message/issues/67ServerRequestInterface::getParsedBody()
指定为返回null|array|object
,因此在此处将其类型指定为mixed
。关于禁止object
的情况有一些讨论,因为任何使用都会将其绑定到特定的实现或堆栈,这可以将其类型指定为?array<string,mixed>
。没有这样做,因为 PHP 实现不必遵守此类型。ServerRequestInterface::getQueryParams()
和getUploadedFiles()
返回未类型化的数组,因为它们返回树状结构而不是键值结构 - 例如?a[b][c]=123
。它们可以被指定为array<string,mixed>
,但这会使它们更难以使用。- 这些函数的返回值在 PSR-7 中未定义;该项目将它们定义为返回
void
,以防止用户依赖于未指定的行为(《https://github.com/php-fig/http-message/issues/68》)StreamInterface::seek()
StreamInterface::rewind()
UploadedFileInterface::moveTo()
- 这些组合意味着最用户友好的(且安全的)hack 定义不适合实现使用(参见 #2)
未来工作
为 Hack 创建一个衍生的标准,解决上述问题。想法包括
- 禁止非字符串请求目标
- 禁止
object
解析后的主体 - 平展
getUploadedFiles
、getParsedBody
、getQueryParams
这将是一个单独的项目。