При написании сложных систем на php, количество подключаемых файлов возрастает неимоверно. Подключать в лоб, все необходимые файлы, быстро надоедает. Да и такой способ сказывается на быстродействии скрипта. Ведь не для всех операций нужны все скрипты.
На помощь приходит встроенный в php механизм автозагрузки классов при их вызове.
Раньше мы делали так:
<?php include 'db.php'; $db = new db();
Если класс не будет загружен то мы получим фатальную ошибку. Пойдем другим путем. Положим, что все наши классы лежать в папке classes/ и названия классов соответствуют названиям файлов с префиксом class.
Регистрируем автозагрузчик функцией spl_autoload_register
<?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) )" мне нравится больше...
Валера, проверьте, плз,
форма комментариев на статьи
часто "съедает" пробелы между словами... спс
Как-то так