排查 class not found 错误,核心是检查命名空间声明、文件路径与自动加载配置是否匹配。确保类名与文件名一致,且 composer.json 中的 autoload 规则正确覆盖了代码目录,修改后必须执行 composer dump-autoload 刷新映射表。

如何验证 Composer autoload 映射是否正确生成?
通过查看生成的 vendor/composer/autoload_classmap.php 文件,可以确认类名到文件路径的映射是否存在。如果目标类不在该文件中,说明自动加载规则未生效或路径配置有误。

<?php
// composer.json
{
"autoload": {
"psr-4": {
"App\": "src/"
}
}
}
// src/User.php
namespace App;
class User { }
// 运行命令
// composer dump-autoload -o
// 检查 vendor/composer/autoload_classmap.php
// 应包含 'AppUser' => $baseDir . '/src/User.php'
?>
为什么手动 require 会报 Class not found?
手动使用 require 引入文件时,若文件内定义了命名空间,但当前作用域未通过 use 语句导入,PHP 会在全局命名空间查找该类,从而引发 Class not found 错误。必须显式导入或使用完全限定类名。
立即学习“PHP免费学习笔记(深入)”;

<?php // 错误示例:未导入命名空间 require_once 'src/User.php'; $user = new User(); // Fatal error: Class 'User' not found // 正确示例:使用完全限定类名 require_once 'src/User.php'; $user = new AppUser(); // 成功实例化 ?>
当类名大小写不一致时会发生什么?
在 Linux 系统下,文件系统区分大小写。若类名定义为 User,但文件名保存为 user.php,自动加载器将无法找到文件,导致 Class not found 错误。Windows 和 macOS 默认不区分大小写,可能掩盖此问题,但在生产环境部署时会报错。



















