@Wrxxxh

Как правильно отрефакторить кусок кода?

Добрый вечер, учусь писать правильный код. Возникла такая ситуация, смотрю на свой Autoloader и понимаю, что методы loadClass и getPath режут глаз. Как можно переделать их и сделать более правильно?
class Autoload
{
    private array $classmap = [
        'classes'  => [
            'Example' => 'path/to/example.php',
        ],
        'prefixes' => [
            'Example\\' => 'path/to/example/'
        ],
    ];

    public function __construct(array $classmap)
    {
        $this->classmap = $classmap;
    }

    public function register()
    {
        spl_autoload_register([$this, 'loadClass']);
    }

    private function loadClass(string $class)
    {
        $path = $this->getPath($class);
        if ($path && file_exists($path)){
            require_once $path;
        } else {
            throw new Exception('File not found in ' . $path . '.');
        }
    }

    private function getPath(string $class)
    {
        $path = $this->has($class);
        if (is_string($path)){
            return $path;
        }
        return $this->match($class);
    }

    private function has(string $class)
    {
        return $this->classmap['classes'][$class] ?? false;
    }

    private function match(string $class)
    {
        foreach ($this->classmap['prefixes'] as $prefix => $path){
            if (strpos($class, $prefix) !== false){
                return str_replace([$prefix, '\\'], [$path, '/'], $class . '.php');
            }
        }
        return false;
    }
}
  • Вопрос задан
  • 142 просмотра
Пригласить эксперта
Ответы на вопрос 2
@P747
1. Можно сделать автозагрузчик на основе PSR-4: https://tyapk.ru/blog/post/php-autoload
2. Нужно соблюдать PSR-12 https://www.php-fig.org/psr/psr-12/
3. Всегда документировать код (методы, класс и т.д.), так же использовать PHPDoc https://elisdn.ru/blog/80/some-reasons-to-learn-phpdoc
4. Купите PhpStorm, нажимаете CTRL+ALT+L(сам делает разметку правильной), плюс дополнительные плагины для соблюдения правильности написания кода
Ответ написан
Комментировать
Dreamka
@Dreamka
Web-разработчик.
loadClass: Ловите эксепшн из блока try-catch и как-то странно имхо require_once из метода выполнять. Нужно что-то другое. С одного класса это не очеидно.

getPath: Кажется вообще лишним методом. Но если он для чего то и нужен, то сократить его можно до одной строки.
Ответ написан
Ваш ответ на вопрос

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

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