装 psr/http-message 只提供接口定义,无法实例化 Request/Response;需额外安装实现库如 guzzlehttp/psr7 才能 new 对象,且必须同时保留接口包以确保类型识别与依赖兼容。

composer require psr/http-message 只装接口,不带实现
装了 psr/http-message 后,class_exists('PsrHttpMessageRequestInterface') 会返回 true,但你没法 new 出 Request 或 Response 对象——它只是定义了“长什么样”,没提供“怎么造出来”。这跟装 psr/http-client 是一样的逻辑:接口和实现必须分开引入。
- 只运行
composer require psr/http-message→ 你获得了所有RequestInterface、ResponseInterface等类型声明,可用于 type-hint 和静态分析 - 但调用
new Request(...)会报错:类未找到 - 实际发请求或构造响应时,必须额外选一个 PSR-7 实现,比如
guzzlehttp/psr7或zendframework/zend-diactoros
选哪个实现?guzzlehttp/psr7 是当前最稳的选择
截至 2026 年 3 月,guzzlehttp/psr7 已成为事实标准:维护活跃、文档清晰、与主流 HTTP 客户端(如 Guzzle、Symfony HttpClient)兼容性最好,且对流处理、内存控制更可控。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
composer require guzzlehttp/psr7后,就能直接用:new GuzzleHttpPsr7Request(...)、new GuzzleHttpPsr7Response(...) - 注意:它不自动加载
psr/http-message,所以两个包建议都显式 require(Composer 会自动 dedupe 接口包) - 避免用已归档的
zendframework/zend-diactoros(2023 年起不再维护),新项目别踩这个坑
为什么不能跳过接口包,只装实现?
看似多此一举,但这是 PHP 类型生态的关键设计。实现库(如 guzzlehttp/psr7)在 composer.json 中把 psr/http-message 声明为 require,不是 require-dev —— 意味着它依赖接口契约运行。如果你删掉 psr/http-message,某些 IDE 或 PHPStan 可能无法识别类型,且其他依赖该接口的包(如中间件、日志桥接器)会直接失败。
- 现象:
PHP Fatal error: Interface 'PsrHttpMessageRequestInterface' not found - 原因:不是实现库漏装,而是接口包被意外卸载或未被 autoload 正确识别
- 验证命令:
composer show psr/http-message确保已安装;再跑php -r "var_dump(interface_exists('Psr\Http\Message\RequestInterface'));"
常见混淆点:psr/http-client 和 psr/http-message 不是一回事
这两个包解决不同层次的问题:psr/http-message 描述“消息长啥样”(Request/Response 结构),而 psr/http-client 描述“怎么发出去”(ClientInterface::sendRequest())。它们可以独立存在,也能组合使用。
- 只装
psr/http-message+guzzlehttp/psr7→ 你能构造消息,但没法发送(没客户端) - 只装
psr/http-client→ 你连RequestInterface都没有,sendRequest()的参数类型都标不了 - 典型组合:
psr/http-message+guzzlehttp/psr7+guzzlehttp/guzzle(后者自带符合psr/http-client的实现)
psr/http-message 在 vendor/composer/autoload_psr4.php 里有对应映射。

















