@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;
    }
}
  • Вопрос задан
  • 129 просмотров
Пригласить эксперта
Ответы на вопрос 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: Кажется вообще лишним методом. Но если он для чего то и нужен, то сократить его можно до одной строки.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
RecruitIT Москва
от 100 000 до 160 000 ₽
Сбер Москва
До 240 000 ₽
от 130 000 до 180 000 ₽
25 окт. 2020, в 11:50
3000 руб./за проект
25 окт. 2020, в 11:42
3000 руб./за проект
25 окт. 2020, в 10:25
6000 руб./за проект