Оглавление

Автоматическая загрузка классов

В PHP 4 при создании классов у разработчиков не было доступного механизма автоматической загрузки определенного класса по требованию. Если бы в своих сценариях вы потенциально могли зависеть от класса, то вам пришлось бы включать его с самого начала создания своего приложения, независимо от того, был ли он нужен или нет. В PHP 5 все иначе: вы можете определить функцию для загрузки классов по мере необходимости. Это функция __autoload(); она имеет следующий прототип:

 

function __autoload( $classname );

 

где $classname — это имя класса, который PHP не может найти. В функцию __autoload() можно добавить любую логику для определения местоположения класса и его загрузки. Благодаря этому можно быстро и легко осуществить удаленную загрузку классов из базы данных, файловой системы и тому подобного. Единственное, что необходимо сделать в случае использования этой функции, это загрузить класс в PHP (обычно с помощью оператора require_once()) до окончания вызова функции. Если класс не был загружен до завершения выполнения функции __autoload() (или если функция __autoload() не была определена), PHP завершит выполнение сценария и выведет сообщение о невозможности найти определенный класс.

В качестве примера использования функции __autoload() рассмотрим листинг 23.

 

Листинг 23.

function __autoload($class) {
    $files = array( 'MyClass' => "/path/to/myClass.class.php", 'anotherClass' 
		    => "/path/to/anotherClass.class.php" );
    if( ! isset( $files[ $class ] ) ) return;
    require_once( $files[ $class ] );
}
$a = new MyClass;
$b = new anotherClass;

 

В листинге 23 функция __autoload() используется для загрузки классов, определяя их местоположение в заранее заданном ассоциативном массиве. Поскольку классы MyClass и anotherClass еще не были определены в сценарии, в обоих случаях будет вызываться функция __autoload(), для того чтобы сценарий самостоятельно смог найти требуемый класс.

Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити