Задать вопрос

Почему не работает вложенное пространство имен?

Прочитал статью (в самом низу текст)
https://code.mu/ru/php/book/oop/namespaces/command-use/

Цитата
При использовании команды use можно указывать относительные пути, подобно тому, как мы это делали в предыдущем уроке. Давайте посмотрим на примере. Пусть мы подключаем некоторый класс:

namespace Core\Admin;
use \Core\Admin\Path\Router;
class Controller extends Router{}

Как вы видите, начало пространства имен подключаемого класса совпадает с текущим пространством. Это значит, что мы можем эту часть при подключении нашего класса, убрав при этом начальный обратный слеш:

namespace Core\Admin;
use Path\Router; // делаем относительный путь
class Controller extends Router{}


Пытаюсь повторить. Пишу свой код.

Код для примера. Я знаю, что не следует писать 2 пространства имен в одном файле.
Этот код в песочнице https://onlinephp.io/c/b032a

namespace MyCompany\classes 
{
	
// ЭТО РАБОТАЕТ
//use MyCompany\classes\addons\MyClass1; // Работает.
// use \MyCompany\classes\addons\MyClass1; // Работает.

// А ЭТО НЕ РАБОТАЕТ
// Так как начальная часть пути совпадает, мы можем его упростить.
     use addons\MyClass1; // Error: Class 'addons\MyClass1' not found Странно, не работает!
    $myClass1 = new MyClass1();
}

namespace MyCompany\classes\addons 
{
    class MyClass1
    {
        function __construct()
        {
            echo 'MyClass1 создан.';
        }
    }
}


Почему не работает вложенное пространство имен? Что я упустил (возможно, был не внимателен).
  • Вопрос задан
  • 91 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 1
Я считаю, что ответ в следующем: автор статьи неправ. К сожалению, в статье отсутствует дата публикации; возможно, такой синтаксис работал какое-то время, а потом его отменили. Мануал на эту тему категоричен:
импортируемые имена должны быть абсолютными и не обрабатываются относительно текущего пространства имён.


Возможно, автор статьи имел в виду вот это:
namespace MyCompany\classes
{
    $myClass1 = new addons\MyClass1();
}

namespace MyCompany\classes\addons
{
    class MyClass1
    {
        function __construct()
        {
            echo 'MyClass1 создан.';
        }
    }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@pantsarny
Подключите psr4 загрузчик
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы