Обычно, если вам необходимо подключить сторонний класс вы используете для этого функции include_once() или require_once(), но этот процесс давно ужа автоматизирован разработчиками Zend в их фреймворке Zend Framework 101. В этой статье речь пойдет о Zend_Loader – Zend Framework класс для автоматической загрузки других классов в исполняемый программный код.
Для автозагрузки и выполнения, разработанные вами классы должны иметь имена соответствующие определенным правилам. Согласно спецификации Zend_Loader все сторонние классы (классы, разработанные вами и не входящие в фреймворк) должны носить имена в стиле классов Zend Framework.
Zend_Loader воспринимает имена классов как системные пути, заменяя все знаки подчеркивания слешами и добавляя окончание .php. Например класс с именем Zend_Loader будет преобразован в системный путь Zend/Loader.php.
Включение и отключение автозагрузчика
Для того чтобы включить загрузчик используется статический метод Zend_Loader::RegisterAutoload(). Данный метод может иметь 2 аргумента: имя класса, который будет использоваться в качестве автозагрузчика, и указание включить или отключить автозагрузчик.
По умолчанию в качестве первого аргумента выступает Zend_Loader класс, но вы так же можете написать и использовать свой собственный класс в этих целях. При этом стоит учесть, что в вашем классе обязательно должен быть определен метод autoload(). Данный метод принимает один единственный аргумент – имя подгружаемого класса.
Код ниже показывает, как включить автозагрузчик. Выполнив данный скрипт у вас отпадает необходимость в дальнейшем использовать require_once() для вызова стороннего класса.
<?php
require_once('Zend/Loader.php');
Zend_Loader::registerAutoload();
$myFooBar = new Foo_Bar();
?>
Для того чтобы отключить автозагрузчик, нужно указать false в качестве второго аргумента метода registerAutoload(). При отключении автозагрузчика, так же обязательно стоит указать имя класса, который был загрузчиком и сейчас будет отключен, хотя при включении данный параметр был необязательным.
<?php
// assume the auto-loader has already been enabled prior
Zend_Loader::registerAutoload('Zend_Loader', false);
require_once('Foo/Other.php');
$myFooOther = new Foo_Other();
?>
Пишем собственный автозагрузчик
Возникают ситуации когда требуется иной алгоритм подгруздки классов, например в тех случая, если формат имен ваших классов отличен от рекомендуемого фреймворком. К примеру, вы хотите использовать ClassName.class.php вместо ClassName.php, тогда как раз и возникает необходимость наличия собственного загрузчика.
Принцип написания довольно прост и приведен в листинге ниже:
<?php
class MyAutoloader
{
public static function autoload($class)
{
//код вашего автозагрузчика
}
}
?>
Далее вам необходимо включить ваш собственный загрузчик, как это было показано выше:
<?php
require_once('Zend/Loader.php');
Zend_Loader::registerAutoload('MyAutoLoader');
?>
Проверяем существование класса
Если есть необходимость проверить существует ли какой-то определенный класс, вы можете воспользоваться методом class_exists(). Важная вещь, которую стоит знать о class_exists(), если класс не существует, php автоматически вызовет автозагрузчик. Чтобы предотвратить данное событие вы должны указать false вторым параметром метода class_exists().
<?php
require_once('Zend/Loader.php');
Zend_Loader::registerAutoload();
if (!class_exists('MyTestClass')) {
// класс не существует – автозагрузчик попытается его загрузить
}
if (!class_exists('MyOtherTestClass', false)) {
// класс не существует – автозагрузчик не будет вызван
}
?>





