结构变化后的PSR-4自动加载类

时间:2017-05-15 10:33:15

标签: php class autoload psr-4

我认为这不是一个大问题。可能我需要对代码进行一些小改动。在我的项目中,我的src/目录包含File.phpNoFileException.php个文件。

src/File.php

<?php

namespace myns;
use myns\NoFileException;

class File
{
 ...
}

src/NoFileException.php

<?php

namespace myns;

class NoFileException extends \Exception
{
 ...
}

composer.json

"autoload": {
    "psr-4": {
        "myns\\": "src/"
    }
 }

一切正常。现在我想将NoFileException.php移到src/Exception/目录。因此我更改了src/File.php

<?php

namespace myns;
use myns\Exception\NoFileException;

class File
{
 ...
}

src/Exception/NoFileException.php

<?php

namespace myns\Exception; // doesn't work
//namespace myns;         // also does't work

class NoFileException extends \Exception
{
 ...
}

我收到一条声明 class NoFileException not found 。我还在composer.json添加了一个新的映射,并尝试了不同的命名空间组合(我做了dump-autoload)。没有理由提出我的所有尝试。如何解决这个问题?

修改

src/Exception/NoFileException.php中的命名空间为myns时,完整邮件错误如下所示:

Fatal error: Uncaught Error: Class 'myns\Exception\NoFileException' not found in /home/project/src/File.php:21
Stack trace: #0 /home/project/src/File.php(15):
myns\File->readable('r') #1 /home/project/index.php(20): 
myns\File->__construct('files/filename...') #2 {main} thrown in /home/project/src/File.php on line 21

当命名空间为myns\Exception时,错误消息相同,但开头没有Class字。

0 个答案:

没有答案