php — Не удается повторно объявить функцию автоматической загрузки, даже если она уже объявлена

#php

#php

Вопрос:

У меня есть веб-приложение, в котором есть несколько файлов. Файлы, о которых я в настоящее время беспокоюсь, это index.php и inc/Autoloader.php .

В настоящее время в index.php У меня есть include(dirname(__FILE__)."/inc/Autoloader.php"); в моем index.php . Перед этой строкой я включил свой заголовок, в котором есть моя панель навигации и другие.

Когда я пытаюсь получить доступ к своему индексу, PHP выдает эту ошибку:

 PHP Fatal error: Cannot redeclare load_class() (previously declared in /redacted/directory/webroot/inc/Autoloader.php:17) in /redacted/directory/webroot/inc/Autoloader.php on line 17
  

Это моя функция автозапуска:

 function Infinia_load_class($classname) {

    // Don't __DIR__ (PHP Magic Constant __DIR__ is not in PHP 5.3)

    $filename = dirname(__FILE__).DIRECTORY_SEPARATOR.'infinia_class.'.strtolower($classname).'.php';

    if (is_readable($filename)) {
        require $filename;
        if (file_exists(dirname(__FILE__)."/../InfiniaLegit.config.php")) {
            require dirname(__FILE__)."/../InfiniaLegit.config.php";
        } else {
            require dirname(__FILE__)."/config.php";
        }
    }


}

if (version_compare(PHP_VERSION, '5.1.2', '>=')) {
    //SPL autoloading was introduced in PHP 5.1.2
    if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
        spl_autoload_register('Infinia_load_class', true, true);
    } else {
        spl_autoload_register('Infinia_load_class');
    }
} else {
    /**
     * Fall back to traditional autoload for old PHP versions
     * @param string $classname The name of the class to load
     */
    function __autoload($classname)
    {
        Infinia_load_class($classname);
    }
}
  

Я проверил проект и не вижу никаких признаков повторного объявления функции.

Репозиторий проекта Git

Если кто-нибудь знает, что происходит, помощь была бы очень признательна! Спасибо!

Правка 1: Обновите автозагрузчик до последней версии в Git

Комментарии:

1. 1. Приведенный выше код отличается от автозапуска в репозитории git. 2. Почему вам требуется один и тот же файл конфигурации каждый раз, когда вы загружаете класс автоматически? 3. С помощью приведенного выше кода, похоже, вы могли бы получить много «уже объявленных», поскольку некоторые конфигурационные файлы являются классами, которые будут загружаться снова и снова. Пусть автозагрузчик просто загружает классы, если они еще не загружены.

2. @MagnusEriksson единственная причина, по которой я загружаю конфигурацию в автозагрузчике, потому что конфигурация должна быть загружена в каждый файл

3. Тогда вам нужно пересмотреть свой дизайн. Создайте класс конфигурации, который загружает файл конфигурации и повторно использует тот же экземпляр класса. В любом случае, вы будете получать ошибки, если будете продолжать требовать один и тот же класс снова и снова.