hack-psr/psr7-http-message-hhi

PSR-7 的类型检查器定义

v1.0.1 2018-02-09 20:54 UTC

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/67
  • ServerRequestInterface::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 解析后的主体
  • 平展 getUploadedFilesgetParsedBodygetQueryParams

这将是一个单独的项目。