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

PSR-4自动加载器故障:无法找到Foo\Bar\Qux\Quux类

排查PSR-4自动加载器类找不到的问题

我帮你排查了一下,你遇到的Class 'Foo\Bar\Qux\Quux' not found错误,核心问题出在文件路径的处理上,咱们一步步来修复:

1. 绝对路径导致文件找不到

你在index.php里给命名空间绑定的路径是'/src'和'/tests',这是系统根目录的绝对路径(比如对应Windows的C:\src),但你的src和tests目录明明在项目根目录(C:\xampp\htdocs\Home\foo-bar)下面,自动加载器自然找不到文件。

修复方法

用__DIR__获取当前index.php所在的目录(也就是项目根目录),然后拼接正确的子目录路径:

<?php
// 获取项目根目录(index.php所在的目录)
$rootDir = __DIR__ . DIRECTORY_SEPARATOR;
$loader->addNamespace('Foo\Bar', $rootDir . 'src');
$loader->addNamespace('Foo\Bar', $rootDir . 'tests');

2. 大小写不一致的潜在问题

你的目录是example(全小写),但index.php里写的是require_once "Example/loader.php";。虽然Windows系统不区分文件大小写,但如果后续切换到Linux/Mac环境,这个问题会直接导致加载失败,建议统一大小写:

require_once "example/loader.php";

3. (可选)添加调试代码验证路径

如果还不确定问题,可以在loader.php的loadMappedFile方法里加一行调试代码,查看自动加载器实际尝试加载的文件路径:

protected function loadMappedFile($prefix, $relative_class)
{
    if (isset($this->prefixes[$prefix]) === false) {
        return false;
    }

    foreach ($this->prefixes[$prefix] as $base_dir) {

        $file = $base_dir
              . str_replace('\\', '/', $relative_class)
              . '.php';
        
        // 调试输出:查看实际要加载的文件路径
        echo "尝试加载文件:" . $file . "<br>";

        if ($this->requireFile($file)) {
            return $file;
        }
    }
    return false;
}

修复后的完整index.php示例

<?php

require_once "example/loader.php";
$loader = new \Example\Psr4AutoloaderClass;

$loader->register();

// 获取项目根目录
$rootDir = __DIR__ . DIRECTORY_SEPARATOR;
$loader->addNamespace('Foo\Bar', $rootDir . 'src');
$loader->addNamespace('Foo\Bar', $rootDir . 'tests');

new \Foo\Bar\Qux\Quux;

另外确认一下:你的src/Qux/Quux.php文件里的命名空间namespace Foo\Bar\Qux;是正确的,这部分没问题。

按照上面的修改后,自动加载器就能正确找到Foo\Bar\Qux\Quux类了。

内容的提问来源于stack exchange,提问作者Danny St.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:19:53