【问题标题】:Different namespaces for main folder and subfolder主文件夹和子文件夹的不同命名空间
【发布时间】:2019-05-11 16:23:03
【问题描述】:
是否可以这样做:
"psr-4": {
"App\\": "src/",
"Tech\\": "src/Tech/"
}
如您所见,src 文件夹有 App 命名空间,但在 src/Tech/ 中必须是另一个只是 Tech 命名空间。我试过了,但总是报错:
Cannot declare class, because the name is already in use
【问题讨论】:
标签:
php
namespaces
composer-php
psr-4
php-namespaces
【解决方案1】:
是的,这是可能的,虽然我不知道有什么好的理由去做这样的事情——它只会让理解命名空间结构变得更加困难。
错误Cannot declare class, because the name is already in use可能是FQN不明确引起的,例如如果你有文件:
<?php
namespace App;
use Tech\MyClass;
$myClass = new MyClass();
你有App\MyClass 然后导入MyClass 是模棱两可的-new MyClass() 可能意味着new \App\MyClass() 或new \Tech\MyClass()。在这种情况下,您需要使用别名:
<?php
namespace App;
use Tech\MyClass as TechMyClass;
$myClass = new MyClass();
$myTechClass = new TechMyClass();