Большинство разработчиков объектно-ориентированных приложений создают для каждого определения класса отдельный файл с кодом PHP. Одной из самых больших неприятностей в этом случае является необходимость писать в начале каждого скрипта длинный список подгружаемых файлов.
Если используется PHP 5, то делать это не обязательно. Вы можете определить функцию __autoload, которая автоматически вызывается в том случае, когда вы пытаетесь использовать класс/интерфейс, который не был определен ранее. Вызов этой функции - это последний шанс для интерпретатора загрузить класс прежде, чем он закончит выполнение скрипта с ошибкой.
Замечание:
Исключения, вызванные в функции __autoload, не могут быть перехвачены в блоке catch и завершатся с неисправимой ошибкой.
Замечание:
Автоматическая загрузка не доступна в случае использования PHP в командной строке в интерактивном режиме.
Замечание:
Если имя класса используется, например, для вызова через call_user_func(), то оно может содержать некоторые опасные символы, такие как ../. Поэтому, рекомендуется не использовать данные от пользователей в таких функциях или же, как минимум, проверять значения в __autoload().
Пример #1 Пример автоматической загрузки
В этом примере функция пытается загрузить классы MyClass1 и MyClass2 из файлов MyClass1.php и MyClass2.php соответственно.
<?php
function __autoload($class_name) {
require_once $class_name . '.php';
}
$obj = new MyClass1();
$obj2 = new MyClass2();
?>
В этом примере представлена попытка загрузки интерфейса ITest.
<?php
function __autoload($name) {
var_dump($name);
}
class Foo implements ITest {
}
/*
string(5) "ITest"
Fatal error: Interface 'ITest' not found in ...
*/
?>