До этого момента я использовал процедурные автономные функции автозагрузчика и зарегистрировал их с помощью spl_autoload_register(), чтобы автоматически загружать мои (обычно) классы с именами, Однако в последнее время я заметил, что люди упоминают использование классов автозагрузки в сочетании с некоторыми из основных фреймворков PHP.
Почти весь мой код объектно ориентирован в наши дни, но я действительно не вижу преимуществ использования класса Autoloader над базовой функцией в этом экземпляре. И с точки зрения проверки, я очень хорошо разбираюсь в class_exists() проверяет в моих тестах, чтобы убедиться, что процедурные функции загружают файлы правильно.
Итак, мои вопросы три:
- Какие преимущества или возможности (если таковые имеются) могут повлиять на то, чтобы реорганизовать вещи и начать использовать полностью раздутый объект для файлов классов автозагрузки?
- Я пропустил некоторые очевидные преимущества здесь, помимо очевидных возможностей ООП?
- Не могли бы вы сделать дело для процедурных или классных автозагрузчиков?
UPDATE
Ниже приведен пример кода для типичной функции автозагрузки, которую я мог бы использовать. Это метакод, поэтому не смотрите на опечатки. Я организую структуры каталогов, чтобы они отображали пространства имен. Гипотетическая функция explode_namespaces()
теоретически может быть включена как статический метод наряду со статическим методом autoload()
в классе, так что одно преимущество. Возможно, было бы проще объединить эти разрозненные функции "полезности" как методы в одном классе.
function autoload($class_name)
{
$root = APP_LIBS; // a directory path constant set at config time
if ($namespaces = explode_namespaces($class_name)) {
$domain = array_shift($namespaces);
$root .= "/$domain/";
$class_name = array_pop($namespaces);
$directories = array();
foreach ($namespaces as $directory) {
$directories[] = $directory;
}
$root .= implode($directories, '/');
}
$file = "$root/$class_name.php";
if (file_exists($file)) {
include $file;
}
}