Не очень хорошая идея называть пространство имен, как класс, потому что это сбивает с толку (и я думаю, что это то, что здесь происходит). В этот момент вы определяете псевдоним через use Controller
, который ссылается либо на класс \Controller
, либо на пространство имен \Controller
, но ваш класс, потому что он находится в пространстве имен, называется \Controller\Controller
1
use Controller;
$class = new Controller\Controller;
или
$class = new \Controller\Controller;
или
use Controller\Controller;
$class = new Controller;
Идея состоит в том, что в тот момент, когда вы пытаетесь получить доступ к классу с его относительным именем, он пытается сопоставить «первую часть» с любым псевдонимом, определенным с помощью use
(запоминающее устройство use MyClass
совпадает с use MyClass as MyClass
. Вещество после as
- это псевдоним).
namespace MyNamespace\MyPackage\SomeComponent\And\So\On {
class MyClass {}
}
namespace Another {
use MyNamespace\MyPackage\SomeComponent; // as SomeComponent
$class = new SomeComponent\An\So\On\MyClass;
}
Как вы можете видеть, PHP находит SomeComponent
в качестве первой части и сопоставляет ее с SomeComponent
-алиасом строкой выше.
Подробнее об этом можно прочитать в руководстве по пространствам имен .
1 Оно называется «Полное имя класса», если вы называете класс с его полным именем.