PHP-класс автозагрузчика или процедурная функция автозагрузчика?

До этого момента я использовал процедурные автономные функции автозагрузчика и зарегистрировал их с помощью 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;
  }
}

Ответы

Ответ 1

Вы сравниваете функции с методами. Это просто синтаксический сахар.

Если у вас нет автозагрузчика на основе карты или у вас есть встроенная таблица зависимостей, вам не нужны атрибуты класса, чтобы отслеживать вещи (или использовать при этом статические или глобальные вары). Реконфигурация времени выполнения также не является реальной необходимостью на практике.

Вы можете сделать процедурный автозагрузчик проектно-настраиваемым с константами и т.д. Наличие свойств конструктора не так важно для повторного использования с реализацией метода. Это может выглядеть немного лучше.

Ответ 2

Используйте предварительно построенный, если вы уже используете другую основную часть фреймворка, иначе это не имеет значения.

Кроме того, использование одного автозагрузчика с несколькими зарегистрированными пространствами имен/каталогами уменьшит объем памяти настолько незначительно, но это не является проблемой.