Как укоротить namespace и use?

Добрый вечер, как можно укоротить namespace и use?

В данный момент имеется: namespace folder\folder\folder\Components\Class, а хотелось бы namespace Components\Class и в дальнейшем использовать: use Component\Class. Возможно ли это реализовать?

Решение:
Спасибо всем участникам данного вопроса, решил задачу путем написания класса автозагрузки.
class Autoload
{
    protected $cores = ['Components', 'Apps']; 
    protected $collected = [];

    function __construct()
    {
        spl_autoload_register(function($className){
            $path = str_replace('\\', '/', $className.'.php');
            if (file_exists($path)) {
                require_once $path;
            } elseif ($this->Autoload($className)) {
                require_once $this->collected['path'];
            }
        });
    }

    protected function Autoload($className)
    {
        $coretype = preg_split('/(?=[A-Z])/', $className);
        foreach ($this->cores as $core) {
            if (preg_match("/".$coretype['1']."/i", $core)) {
                $namespace = explode('\\', $className);
                $this->collected = ['core' => $coretype[1],'type' => $coretype[2], 'name' => $namespace[1], 'class' => $namespace[2], 'folder' => $namespace[2], 'path' => null];
                
                if ($this->preparePath()) {
                    return true;
                }
            }
            return false;
        }
    }

    protected function preparePath()
    {
        if ($this->collected['type'] == 'Component\\') {
            $path = 'path/path/components/' . $this->collected['name'] . '/' . $this->collected['class'] . '.php';
        } elseif ($this->collected['type'] == 'App\\') {
            //$path = 'path/App' . $this->collected['name'] . '/' . $this->collected['class'] . '.php';
        }
        $this->collected['path'] = $path;
        return true;
    }
    
}


$cores - Тут находятся сокращения.
preparePath() - Подготавливает путь к файлу, добавляется путем elseif...

Для тех, кто решит воспользоваться этим кодом, обязательно перепишите его, так как он создавался в целях обучения...
Пример: namespace Component\Test;
Вызов: $test = new \Component\Test\Test2; (Test2 - файл и класс в папке Test).
  • Вопрос задан
  • 167 просмотров
Пригласить эксперта
Ответы на вопрос 2
maksim92
@maksim92
Нашел решение — пометь вопрос ответом!
Так? composer.json
"autoload": {
    "psr-4": {
      "Myks92\\User\\": "src/"
    }
  },
  "autoload-dev": {
    "psr-4": {
      "Myks92\\User\\Tests\\": "tests/"
    }
  },
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы