Добрый вечер! Хочу сделать автоподгрузку классов ядра сайта. Подскажите как правильно реализовать это? Сейчас у меня подгрузка осуществляется так: Файл Index.php: Код (Text): /* *--------------------------------------------------------------- * ВХОДНОЙ СКРИПТ *--------------------------------------------------------------- */ require_once(APP_PATH.'/myapp.php'); //подключаем файл приложения MyApplication::run(); //запускаем ядро приложения Файл myapp.php: Код (Text): <?php //приложение class MyApplication { //запуск нового приложения public static function run() { require_once(APP_PATH.'/core/session.php'); //подключаем файл, содержащий класс для работы с сессиями require_once(APP_PATH.'/config/config.php'); //подключаем файл, содержащий класс конфигурации приложения require_once(APP_PATH.'/core/loadhelper.php'); //подключаем файл, содержащий класс загрузки классов помощников require_once(APP_PATH.'/core/loadfilter.php'); //подключаем файл, содержащий класс загрузки классов фильтров require_once(APP_PATH.'/core/controller.php'); //подключаем файл, содержащий класс Controller require_once(APP_PATH.'/core/model.php'); //подключаем файл, содержащий класс модели require_once(APP_PATH.'/core/view.php'); //подключаем файл, содержащий класс View - представление require_once(APP_PATH.'/core/db.php'); //подключаем файл, содержащий класс для подключения к БД require_once(APP_PATH.'/core/mysql.php'); //подключаем файл, содержащий класс для работы с СУБД MySQL require_once(APP_PATH.'/core/mongo.php'); //подключаем файл, содержащий класс для работы с MongoDb require_once(APP_PATH.'/core/security.php'); //подключаем файл, содержащий методы, которые помогают создавать безопасные приложения, обрабатывая данные для безопасности require_once(APP_PATH.'/core/bauth.php'); //подключаем файл, содержащий базовый класс аутентификации require_once(APP_PATH.'/core/icache.php'); //подключаем файл, содержащий интерфейс для классов работающих с кешированием require_once(APP_PATH.'/core/mcache.php'); //подключаем файл, содержащий синглтон класс для работы с Memcache require_once(APP_PATH.'/core/fcache.php'); //подключаем файл, содержащий синглтон класс, реализующий механизм кеширования на файлах require_once(APP_PATH.'/components/user.php'); //подключаем файл, содержащий класс пользователя require_once(APP_PATH.'/components/auth.php'); //подключаем файл, содержащий класс аутентификации require_once(APP_PATH.'/core/request.php'); //подключаем файл, содержащий класс обработки запросов require_once(APP_PATH.'/core/route.php'); //подключаем файл, содержащий класс для роутинга } }
1. подключаемый файл класса должен иметь только описание класса, никакого потокового алгоритма 2. не надо подключать всё сразу. подключать нужно только то что будет использовано. 3. чтоб проще было реализовать пункт 2 - изучай автозагрузку. тогда при вызове класса машина заметит его отсутствие, попробует выполнить автозагрузку и если всё ок - класс прозрачно появится в памяти и будет использован. если что-то пойдет не так - будет просто фатал об использовании недекларированного класса.
Такой вариант верен? Файл index.php: Код (Text): require_once(APP_PATH.'/myapp.php'); //подключаем файл приложения MyApplication::__autoload ($className); //запускаем ядро приложения class_exists('Session'); class_exists('Config'); class_exists('LoadHelper'); class_exists('LoadFilter'); файл myap.php: Код (Text): //приложение class MyApplication { public static function __autoload ($className) { /** AutoLoad config */ if(file_exists(APP_PATH."/config/".$className.".php")){ $result = require_once ""APP_PATH."/config/".$className.".php"; return $result; /** AutoLoad core */ } elseif(file_exists(APP_PATH."/core/".$className.".php")){ $result = require_once ""APP_PATH."/core/".$className.".php"; return $result; /** AutoLoad components */ } elseif(file_exists(APP_PATH."/components/".$className.".php")) { $result = require_once ""APP_PATH."/components/".$className.".php"; return $result; } else { exit("Имя файла не соответствует названии Класса"); } }
типа того, но тебе явно не хватает пространства имён. плюс имхо класс должен искаться в двух локациях или одной: * в двух локациях для исходника или теста * в одной локации если задан ремап пути причем искаться с учетом пространства имен. см PSR-4 например