Php 无法加载与PSR-4位于同一文件夹中的类

Php 无法加载与PSR-4位于同一文件夹中的类,php,composer-php,autoload,psr-4,Php,Composer Php,Autoload,Psr 4,因为我对composer/psr-4自动加载还不熟悉,所以我正试着把我的脑袋绕到composer/psr-4自动加载上 我的项目具有以下结构: | ProjectName |- src | |- MainComponent | |- MainClass.php | |- Component1 | |- Foo.php | |- Bar.php | |- Component2 | |- Baz.php |- tests

因为我对composer/psr-4自动加载还不熟悉,所以我正试着把我的脑袋绕到composer/psr-4自动加载上

我的项目具有以下结构:

| ProjectName
  |- src      
  |  |- MainComponent
  |    |- MainClass.php
  |  |- Component1
  |    |- Foo.php
  |    |- Bar.php
  |  |- Component2
  |    |- Baz.php
  |- tests
  |  |- FooTest.php
  |  |- ...
  |- vendor
  |  |- [...]
  |  |- ...     
  |- composer.json
  |- phpunit.xml.dist
在my composer.json中,我有以下psr-4条目:

"autoload": {
    "psr-4": {
        "MyName\\ProjectName\\": "src/"
    }
}
我已经完成了我的第一个组件,并在Foo.php中创建了名称空间类,如下所示:

namespace MyName\ProjectName\Component1;

class FooClass 
{
   ...
}
现在我想使用Bar.php中的FooClass(它位于同一个文件夹中):

我得到以下错误:

Fatal error: Class 'MyName\ProjectName\Component1\FooClass' not found in
/path/to/Bar.php
尝试使用完全限定名时引发相同的错误:

use MyName\ProjectName\Component1\FooClass;

$foo = new FooClass();
奇怪的是,PHPUnit可以正确解析名称空间,因为我的测试可以正确加载和执行,使用与上面相同的确切语句。
这是我的测试/FooTest.php:

use MyName\ProjectName\Component1\FooClass;

class FooTest extends PHPUnit_Framework_TestCase
...


我做错了什么?

你的类名错了。正如您可以读入的,类名必须等于文件名

因此,当您有类的路径时,比如:
src/Component1/Foo.php

您的命名空间必须看起来像:
\MyName\ProjectName\Component1
,类名必须是:

class Foo { ... }
在进口方面:

use MyName\ProjectName\Component1\Foo;
class Foo { ... }
use MyName\ProjectName\Component1\Foo;