Добрый вечер, учусь писать правильный код. Возникла такая ситуация, смотрю на свой 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;
}
}