Php 致命错误:未捕获错误:类';Project\Router\Hello';找不到

Php 致命错误:未捕获错误:类';Project\Router\Hello';找不到,php,namespaces,composer-php,autoload,Php,Namespaces,Composer Php,Autoload,这是我第一次使用Composer,我想弄明白为什么它不使用我的名称空间 在我的project/目录中: ├── composer.json ├── composer.lock ├── composer.phar ├── README.md ├── vendor (truncated) └── src ├── Config.php ├── Handler.php └── Router.php src/Config.php <?php $project_root =

这是我第一次使用Composer,我想弄明白为什么它不使用我的名称空间

在我的
project/
目录中:

├── composer.json
├── composer.lock
├── composer.phar
├── README.md
├── vendor (truncated)
└── src
    ├── Config.php
    ├── Handler.php
    └── Router.php
src/Config.php

<?php
$project_root = realpath(__DIR__ . '/..');
$autoload = $project_root . '/vendor/autoload.php';
?>
http://127.0.1.1/project/src/Router.php

致命错误:未捕获错误:在/path/to/Project/src/Router.php中找不到类'Project\Router\Hello'。38(非实际行)堆栈跟踪:#0{main}在第38行的/path/to/Project/src/Router.php中抛出(非实际行)


我能够使用外部依赖项,因此我的通用编写器设置似乎还可以。我只是不知道我把自己的名字空间搞砸了。你似乎误解了PSR4的工作原理

"autoload": {
    "psr-4": {
        "Project\\": "src"
    }
}
此配置意味着如果您从自动加载程序请求类Project\Handler\Hello,它将检查路径
src\Handler\Hello.php
(该路径不存在)

如果您将目录结构更改为以下内容,它将起作用:

└── src
    ├── Config.php
    ├── Router.php
    └── Handler
        └── Hello.php (renamed from Handler.php)
另外,Config.php或Router.php都不包含类,这就破坏了使用类自动加载程序的意义


读一读:

只是为了好玩,你试过使用
\Project\Handler\Hello::world()吗
而不是
使用
?@Machavity是的,我肯定有。同样的错误。
{
    "autoload": {
        "psr-4": {
            "Project\\": "src"
        }
    }
}
"autoload": {
    "psr-4": {
        "Project\\": "src"
    }
}
└── src
    ├── Config.php
    ├── Router.php
    └── Handler
        └── Hello.php (renamed from Handler.php)