При разработке web-приложения на языке PHP с применением средств объектно-ориентированного программирования (ООП), удобно использовать автоматическую загрузку классов, особенно когда классов много, чтобы не использовать require_once или include для каждого файла, содержащего определенным класс.
Идея основана на применении функции Standart PHP Library - spl_autoload_register().
При создании класса: $class = new Class1(), если класс не найден, то вызывается функция spl_autoload_register().
Каждый класс хранится в отдельном файле.
Файл: /test/Framework/Autoloader.php
class Autoloader
{
// Список каталогов, в которых расположены классы
public static $dir_list = array('Framework/Core/', 'Framework/UI/');
public static function register()
{
ini_set('unserialize_callback_func', 'spl_autoload_call');
spl_autoload_register(array(new self, 'autoload'));
}
private static function autoload($class)
{
foreach (self::$dir_list as $dir)
{
$file = trim($dir, '/').'/'.$class.'.php';
if (is_file($file))
{
require_once($file);
}
}
}
}
Файл: /test/index.php
<?php
required_once('Framework/Autoloader.php');
// в случае если каталог поиска файлов классов надо установить свой
// Autoloader::$dir_list = array('Framework/UI');
Autoloader::register();
$core = new Core();
$menu = new Menu();
?>
Autoloader::$dir_list = позволяет определить массив строк, определяющих каталоги, в которых необходимо искать используемые файлы классов, или если для проекта список каталогов является одним и тем же списком, то этот список каталогов можно прописать прямо в статическую переменную класса Autoload `public static $dir_list = ...` и Autoloader::$dir_list не использовать.
Структура каталогов:
/test
/Framework
/Core
Core.php
/UI
Menu.php
Autoloader.php
index.php