#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);
}
}
Я проверил проект и не вижу никаких признаков повторного объявления функции.
Если кто-нибудь знает, что происходит, помощь была бы очень признательна! Спасибо!
Правка 1: Обновите автозагрузчик до последней версии в Git
Комментарии:
1. 1. Приведенный выше код отличается от автозапуска в репозитории git. 2. Почему вам требуется один и тот же файл конфигурации каждый раз, когда вы загружаете класс автоматически? 3. С помощью приведенного выше кода, похоже, вы могли бы получить много «уже объявленных», поскольку некоторые конфигурационные файлы являются классами, которые будут загружаться снова и снова. Пусть автозагрузчик просто загружает классы, если они еще не загружены.
2. @MagnusEriksson единственная причина, по которой я загружаю конфигурацию в автозагрузчике, потому что конфигурация должна быть загружена в каждый файл
3. Тогда вам нужно пересмотреть свой дизайн. Создайте класс конфигурации, который загружает файл конфигурации и повторно использует тот же экземпляр класса. В любом случае, вы будете получать ошибки, если будете продолжать требовать один и тот же класс снова и снова.