首页 > 解决方案 > 主文件夹和子文件夹的不同命名空间

问题描述

是否可以执行以下操作:

"psr-4": {
    "App\\": "src/",
    "Tech\\": "src/Tech/"
}

如您所见,文件夹有App名称空间,src但 insrc/Tech/必须是另一个Tech名称空间。我试过了,但总是报错:

Cannot declare class, because the name is already in use

标签: phpnamespacescomposer-phppsr-4php-namespaces

解决方案


是的,这是可能的,尽管我不知道有什么好的理由去做这样的事情——它只是让理解命名空间结构变得更加困难。

该错误Cannot declare class, because the name is already in use可能是由 FQN 歧义引起的,例如,如果您有文件:

<?php

namespace App;

use Tech\MyClass; 

$myClass =  new MyClass();

然后你有App\MyClassimport for MyClassis ambiguous -new MyClass()可能意味着new \App\MyClass()new \Tech\MyClass(). 在这种情况下,您需要使用别名:

<?php

namespace App;

use Tech\MyClass as TechMyClass; 

$myClass =  new MyClass();
$myTechClass =  new TechMyClass();

推荐阅读