Большинство разработчиков объектно-ориентированных приложений
создают для каждого определения класса отдельный файл с
кодом 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 ... */ ?>