При написании сложных систем на 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/ и т.п.