php-di 通过 composer require php-di/php-di 安装,官方包为 php-di/php-di(v7.x 兼容 php 8.0+),无需额外插件;禁用已废弃的 php-di/composer-integration;使用 containerbuilder 显式控制 autowiring 与 definitions 顺序,避免定义覆盖导致接口解析失败。

PHP-DI 本身不依赖 Composer 安装——它就是靠 Composer 安装的。所谓“PHP-DI_Composer”并不存在,这是常见误解:有人把 php-di/php-di 包名误写成带下划线的形式,或混淆了 PHP-DI 和某个旧版 fork(如 php-di/composer-integration,已废弃)。
直接用 composer require php-di/php-di 就行
PHP-DI 的官方包是 php-di/php-di,当前稳定版本(v7.x)完全兼容 PHP 8.0+,且开箱即用,无需额外“Composer 插件”或“集成包”。
-
composer require php-di/php-di会自动安装最新兼容版(如 v7.0.6) - 安装后,
Container类在DI\Container命名空间下,可直接 new 或通过ContainerBuilder构建 - 不需要手动配置 autoload 或修改
composer.json的extra字段 - 若项目已有
autoload规则,PHP-DI 不会干扰;它的 PSR-4 映射已声明在自身composer.json中
别碰 php-di/composer-integration(已归档)
这个包曾用于 v5 时代自动注册服务提供者,但早在 2019 年就标记为 abandoned,且与 PHP-DI v6+ 不兼容。现在强行安装会导致:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
Class DI\Composer\ServiceProvider not found—— 因类已被移除 - 与
ContainerBuilder::useAnnotations(true)冲突,注解扫描失效 - Composer 自动加载报错:
Cannot use php-di/composer-integration as php-di/php-di
如果你在旧教程里看到它,直接跳过;检查 composer show 输出,确认没有该包残留。
初始化 Container 时注意 autowiring 和 definitions 的顺序
PHP-DI 默认开启自动装配(autowiring),但一旦你传入自定义 definitions,它会覆盖默认行为——不是叠加,而是替换。
- 错误写法:
new Container(['MyService' => \DI\create()])→ 这会关闭 autowiring,连LoggerInterface都无法自动解析 - 正确写法:用
ContainerBuilder显式控制:$builder = new ContainerBuilder();<br>$builder->useAutowiring(true);<br>$builder->addDefinitions([...]);<br>$container = $builder->build();
- 如果只改个别服务,优先用
->extend()而非全量重定义,避免漏掉核心接口绑定(如Psr\Log\LoggerInterface)
真正容易卡住的地方,往往不是安装,而是定义冲突或 autowiring 关闭后没意识到——比如加了一行 ['App\DB' => \DI\create()],结果整个容器突然找不到任何接口实现。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










