Автоматическое подключение классов.
Теория (совсем чуть-чуть).
В PHP, начиная с пятой версии, вы можете самостоятельно определять логику для автоматичесой загрузки классов в момент их инициализации.
Сделать это можно как при помощи стандатрной функции
__autoload(), так и определив собственную функцию (или метод класса) с помощью
spl_autoload_register().
Практика / Подготовка.
В корне нашего сайта создадим файл /index.php и папку /classes в которой будут размещатся файлы классов используемые в нашем проекте.
Создадим два простых класса, которые в момент их обьявления будут с нами здороваться и сообщать свои имена:
Файл /classes/a.php
<?php
class A {
function __construct() {
echo 'Привет! Я класс А.';
}
}
Файл /classes/b.php
<?php
class B {
function __construct() {
echo 'Привет! Я класс B.';
}
}
Теперь попробуем инициализировать эти классы в файле /index.php
Файл /index.php
<?php
$a = new A;
$b = new B;
Запустив наше приложение мы получим ошибки Fatal error с сообщением о том, что наши классы не найдены.
Практика / Использование стандартной ф-ции __autoload().
Исправим файл /index.php и напишем в нем нашу функцию автозагрузки классов.
Для этого мы будим использовать "магическую" функцию
__autoload().
Её "магия" в том, что она принимает в качестве своего аргумента - имя класса, который PHP не может найти.
В самой же функции нужно реализовать логику для определения местоположения класса и его загрузки.
Файл /index.php
<?php
function __autoload($class) {
/*
Важный момент:
имя класса, должно совпадать с именем файла в котором он описан!
*/
if (file_exists('./classes/' . $class . '.php')) //проверяем есть ли класс $class в папке /classes
include_once './classes/' . $class . '.php'; //подключаем файл класса
}
$a = new A;
$b = new B;
Снова запустим наше приложение: ошибки исчезли, вместо них мы видим приветствие от двух наших классов, а это значит что автозагрузка классов работает.
Практика / Использование собственной ф-ции с помощью spl_autoload_register()().
Теперь попробуем переименовать нашу ф-цию
__autoload() к примеру в "hendlerAutoload" и запустим наше приложение - ошибки вернулись, и не удивительно, ведь наша функция потеряла свою "магичность".
Исправим ситуацию при помощи SPL:
Файл /index.php
<?php
//определяем собственную ф-цию автозагрузки...
function hendlerAutoload($class) {
if (file_exists('./classes/' . $class . '.php'))
include_once './classes/' . $class . '.php';
}
//... и регистрируем её
spl_autoload_register('hendlerAutoload');
$a = new A;
$b = new B;
Так же, при помощи
spl_autoload_register() мы можем зарегистрировать в качестве автозагрузчика метод какого-либо класса:
spl_autoload_register(array('Class', 'hendlerAutoload')); // где Class - имя класса в котором описан наш автозагручик
З.Ы: немного скомкано (особенно к концу), по этому задаем вопросы и если есть что добавить - милости прошу