You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用use指令后PHP类仍无法跨文件识别的问题求助

PHP PSR-4自动加载找不到User类的问题解决

问题背景

我有个User类,命名空间是App\src\entities,代码如下:

<?php
namespace App\src\entities;

class User{
    // 类代码
}

在另一个文件里用use引入并实例化:

<?php
namespace App;
use App\src\entities\User;

$user = new User("Test", "test");

IDE能识别这个类,自动补全也正常,但运行代码时直接报错:

Fatal error: Uncaught Error: Class 'App\src\entities\User' not found in /var/www/app/app/public/test.php:5 Stack trace: #0 {main} thrown in /var/www/app/app/public/test.php on line 5

我修改了composer.json的自动加载配置:

"autoload": {
        "psr-4": {
            "App\\": "app/"
        }
    }

也执行了composer dump-autoload重新生成自动加载文件,但问题还是没解决。我刚从C#转PHP,完全搞不懂哪里出问题了。


问题原因

  1. 目录结构与PSR-4映射不匹配:从错误路径/var/www/app/app/public/test.php能看出来,你的项目根目录是/var/www/app/,里面嵌套了一个app子目录。而你配置的App\对应app/,意味着App\src\entities\User对应的文件路径应该是/var/www/app/app/src/entities/User.php——先确认这个文件是不是真的在这个位置,有没有路径写错。
  2. 没引入Composer的自动加载文件:你执行实例化的test.php里,根本没加载vendor/autoload.php,自动加载机制根本没启动,自然找不到类。
  3. 文件名不符合规范:PSR-4要求类文件名必须和类名完全一致(比如User.php,不能是user.php或者其他名字),如果文件名不对,自动加载也找不到。

解决步骤

  1. 核对文件路径:
    确保User.php的路径是/var/www/app/app/src/entities/User.php,和命名空间App\src\entities一一对应:
    • App\ → app/目录
    • src\entities → app/src/entities/子目录
    • User → User.php文件
  2. 引入自动加载文件:
    在test.php的最顶部加上这行代码,路径根据你的vendor目录位置调整:
    require_once __DIR__ . '/../vendor/autoload.php';
    
    比如你的test.php在/var/www/app/app/public/,那么../vendor就是/var/www/app/vendor/,这个路径要确保正确。
  3. 检查文件名:
    确认类文件名叫User.php,和类名完全一致,大小写也要匹配(除非你的服务器文件系统不区分大小写,但最好严格遵守规范)。
  4. 重新生成自动加载:
    再次执行命令,确保配置生效:
    composer dump-autoload
    

内容的提问来源于stack exchange,提问作者Yakiv Baiduk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 03:45:20