Php 作曲家自动加载给出错误“;“未找到类”;

Php 作曲家自动加载给出错误“;“未找到类”;,php,composer-php,Php,Composer Php,我对composer的psr-4自动加载有一些问题。我有一个类似这样的项目结构 项目 -src/ --UTIL/ --身份证/ -------IDInterface.php ---ID.php -测验/ --IDTest.php - ... (其他资料) 然后,在我的composer.json文件中,我有一个psr-4自动加载,如下所示 "autoload": { "psr-4": { "Project

我对composer的psr-4自动加载有一些问题。我有一个类似这样的项目结构

项目
-src/
--UTIL/
--身份证/
-------IDInterface.php
---ID.php
-测验/
--IDTest.php
- ... (其他资料)
然后,在我的composer.json文件中,我有一个psr-4自动加载,如下所示

"autoload": {
        "psr-4": {
             "Project\\": "src"
        }
    }
然后在我的测试类(IDTest.php)中,我有以下内容

<?php

use PHPUnit\Framework\TestCase;
use Project\Utils\ID;

class IDTest extends TestCase
{
    public function testConstructFromString()
    {
        $id = new ID("foo");
        $this->assertSame("foo", $id->value());
    }
}

?>
它似乎指向一条线:

$id = new ID("foo");
这表明自动加载没有像我期望的那样工作

作为参考,ID类如下所示:

<?php

namespace Javelin\Util;

use Javelin\Utils\IDInterface;
use Javelin\Util\IllegalArgumentException;

class ID implements IDInterface{...}
?>

我试着运行
composer dump autoload
,看看是否只需要更新自动加载器。但遗憾的是,问题依然存在。

试试看

use Project\Utils\ID\ID;
Project\Utils\ID
-命名空间。
Project\Utils\ID\ID
-class.

ID.php
文件定义了
Javelin\Util\ID
类,其中应定义
Project\Utils\ID\ID
,您正在请求
Project\Utils\ID
。这里没有匹配项,您需要真正清理它并决定您的类应该使用什么名称空间。好的,这就解决了它。为什么名称空间项目是\Utils\ID?我认为我在类定义中指定了名称空间仅为Project\Utils,这应该意味着Project\Utils\ID是类?非常感谢你的帮助。:)