Почему не работает spl_autoload_register?

Всем привет. Делаю автозагрузку, но есть проблема. Если использую function __autoload , то все работает, если использую spl_autoload_register, то получаю Fatal error: Class 'Config' not found in C:\OpenServer\domains\mvcframework\config\config.php on line 4

Почему так происходит? И как это исправить.

Только не говорите, что не надо писать свой велосипед, лучше используй фреймворки, я хочу разобраться сначала с велосипедом.

Вот код:

<?php

require_once (ROOT.DS.'config'.DS.'config.php');
function __autoload($class_name){
    $lib_path = ROOT.DS.'lib'.DS.strtolower($class_name).'.class.php';
    $controllers_path = ROOT.DS.'controllers'.DS.str_replace('controller', '', strtolower($class_name)).'.controller.php';
    $model_path = ROOT.DS.'models'.DS.strtolower($class_name).'.php';
    
    if (file_exists($lib_path)){
        require_once ($lib_path);
    } elseif (file_exists($controllers_path)){
        require_once ($controllers_path);
    } elseif (file_exists($model_path)){
        require_once ($model_path);
    } else {
        throw new Exception('Failed to include class' . $class_name);
    }
}


Вот другой код:
<?php

require_once (ROOT.DS.'config'.DS.'config.php');


//функция автозагруки, загружающая классы из папки libs:
function loadFromLibs($aClassName) {
    $aClassFilePath = ROOT.DS.'lib'.DS.strtolower($aClassName).'.class.php';
    if (file_exists($aClassFilePath)) {
        echo "<p>executing __aturoload() with aClassName = {$aClassName}</p>";
        require_once $aClassFilePath;
        return true;
    }
    return false;
}


//функция автозагруки, загружающая классы из папки controllers:
function loadFromClassesFront($aClassName) {
    $aClassFilePath = ROOT.DS.'controllers'.DS.str_replace('controller', '', strtolower($aClassName)).'.controller.php';
    if (file_exists($aClassFilePath)) {
        echo "<p>executing __aturoload() with aClassName = {$aClassName}</p>";
        require_once $aClassFilePath;
        return true;
    }
    return false;
}
//функция автозагруки, загружающая классы из папки controllers/admin/:
function loadFromClassesAdmin($aClassName) {
    $aClassFilePath = ROOT.DS.'controllers'.DS.'admin'.DS.str_replace('controller', '', strtolower($aClassName)).'.controller.php';
    if (file_exists($aClassFilePath)) {
        echo "<p>executing __aturoload() with aClassName = {$aClassName}</p>";
        require_once $aClassFilePath;
        return true;
    }
    return false;
}

//функция автозагруки, загружающая классы из папки Models:
function loadFromModels($aClassName) {
    $aClassFilePath = ROOT.DS.'models'.DS.strtolower($aClassName).'.php';
    if (file_exists($aClassFilePath)) {
        echo "<p>executing __aturoload() with aClassName = {$aClassName}</p>";
        require_once $aClassFilePath;
        return true;
    }
    return false;
}


spl_autoload_register('loadFromLibs');
spl_autoload_register('loadFromClassesFront');
spl_autoload_register('loadFromClassesAdmin');
spl_autoload_register('loadFromModels');


В чем проблема?
  • Вопрос задан
  • 2006 просмотров
Решения вопроса 1
alexvdv
@alexvdv Автор вопроса
Решение проблемы:

Подключать
require_once (ROOT.DS.'config'.DS.'config.php');
после автозагрузки, потому что в config.php идет обращение к классу Config, который еще не загружен
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
01 мая 2024, в 02:11
5000 руб./за проект
01 мая 2024, в 00:29
2000 руб./за проект
01 мая 2024, в 00:20
15000 руб./за проект