答案:类重复声明通常因自动加载冲突或手动引入文件导致。检查并移除重复的 require 或 include 语句,避免使用 require_once 手动加载 Composer 管理的类,确保统一使用 Composer 自动加载机制。

出现 "Cannot redeclare class" 错误,通常是因为同一个类被多次加载。在使用 Composer 的项目中,这类问题多由自动加载机制冲突或手动引入文件导致。以下是常见原因和解决方法:
检查是否有重复的 require 或 include
确保没有手动使用 require、require_once、require 'vendor/autoload.php'; 多次
确认 autoloader 只被引入一次
Composer 的 autoload.php 应只包含一次。
- 检查入口文件(如 index.php)是否重复引入 vendor/autoload.php
- 如果你在多个地方调用它(如框架 + 手动脚本),考虑统一引导流程
清理并重建 Composer 自动加载映射
有时自动加载映射出错或缓存不一致,可强制重新生成。
- 运行命令:composer dump-autoload
- 更彻底的方式:composer dump-autoload --optimize
- 若怀疑锁文件问题,可删除 vendor/ 目录后执行 composer install
检查命名空间与文件路径是否匹配
PSR-4 或 PSR-0 规则要求类文件路径与命名空间严格对应。
- 例如类 App\Controller\HomeController 必须位于 src/Controller/HomeController.php
- 检查 composer.json 中 autoload 配置是否正确
- 修改后记得运行 composer dump-autoload
基本上就这些。大多数“Cannot redeclare class”错误都源于加载逻辑混乱或配置错误。只要确保自动加载唯一、路径规范、无手动重复引入,问题基本能解决。










