При написании сложных систем на php, количество подключаемых файлов возрастает неимоверно. Подключать в лоб, все необходимые файлы, быстро надоедает. Да и такой способ сказывается на быстродействии скрипта. Ведь не для всех операций нужны все скрипты.
На помощь приходит встроенный в php механизм автозагрузки классов при их вызове.
Раньше мы делали так:
<?php include 'db.php' ; $db = new db(); |
Если класс не будет загружен то мы получим фатальную ошибку. Пойдем другим путем. Положим, что все наши классы лежать в папке classes/ и названия классов соответствуют названиям файлов с префиксом class.
Регистрируем автозагрузчик функцией spl_autoload_register
1 2 3 4 5 6 | <?php spl_autoload_register( function ( $class_name ) { $file = 'classes/class..' . strtolower ( $class_name ) . '.php' ; if ( file_exists ( $file ) ) require_once ( $file ); }); |
теперь вы сразу же можете использовать new db(), если файл class.db.php с соответствующим классом лежит в папке classes
$db = new db(); // подклчится class.db.php $tpl = new tpl(); // подклчится class.tpl.php $router = new router(); // подклчится class.router.php |
При использовании совместно с техникой синглетонов, вы получаете отличный инструмент автоматизации процесса разработки.
Отличие spl_autoload_register от обычной spl_autoload или просто объявления функции __autoload в том, что Вы можете объявлять несколько загрузчиков, каждый из которых может искать файлы в разных папках. К примеру модули в папке modules/ и т.п.
Комментарии
1. spl_autoload_register - не чувствительна к рЕгИсТрУ...
2. проверка file_exists - излищняя...
2)если такого файла не существует то можно запустить проверку в другой папке, это управляемая загрузка. нет в папке classes, посмотрим в папке modules, я так делаю очень удобно.
Что означает Ваше "запустить проверку в другой папке" ?
Может проще, приступая к реализации проекта, обдумать его полную структуру ?
То есть, ГДЕ и ЧТО будет находится (лежать).
И тогда не надо будет "по ходу" заниматься так называемой "лепниной"... )
Спасибо за участие.
Но Ваш вариант, с проверкой "if ( file_exists($file) )" мне нравится больше...
Валера, проверьте, плз,
форма комментариев на статьи
часто "съедает" пробелы между словами... спс
Как-то так