Класс Yaf_Loader

(Yaf >=1.0.0)

Введение

Yaf_Loader представляет комплексное решение для автозагрузки для Yaf.

При первом извлечении экземпляра Yaf_Application, Yaf_Loader создаёт экземпляр-одиночку и регистрируется с помощью spl_autoload. Вы извлекаете экземпляр, используя Yaf_Loader::getInstance()

Yaf_Loader попытается загрузить класс только один раз, в случае возникновения ошибки, зависит от yaf.use_spl_auload, если эта конфигурация включена Yaf_Loader::autoload() вернёт false, таким образом предоставляя возможность другой функции автозагрузки. Если выключена (по умолчанию), Yaf_Loader::autoload() вернёт true, а также сработает очень полезное предупреждение (полезно, чтобы выяснить, почему класс не может быть загружен).

Замечание:

Пожалуйста, оставьте yaf.use_spl_autoload выключенным, если в какой-то библиотеке нет собственного механизма автозагрузки и его невозможно переписать.

По умолчанию Yaf_Loader предполагает, что вся библиотека (сценарий, определённый классом) хранится в каталоге глобальной библиотеки, который определён в php.ini (yaf.library).

Если вы хотите с помощью Yaf_Loader выполнить поиск некоторых классов (библиотек) в каталоге локальных классов (который определён в application.ini, по умолчанию это application.directory. "/library"), вы должны зарегистрировать префикс класса, используя Yaf_Loader::registerLocalNameSpace()

Давайте посмотрим несколько примеров (при условии, что APPLICATION_PATH application.directory):

Пример #1 Пример конфигурации

// Предполагаются следующие настройки в php.ini: yaf.library = "/global_dir"application.library = APPLICATION_PATH "/library"
Предполагается, что зарегистрировано следующее локальное пространство имён:

Пример #2 Зарегистрировать локальное пространство имён

<?php
class Bootstrap extends Yaf_Bootstrap_Abstract{
public function
_initLoader($dispatcher) {
Yaf_Loader::getInstance()->registerLocalNameSpace(array("Foo", "Bar"));
}
?>
Тогда пример автозагрузки:

Пример #3 Пример загрузки класса

class Foo_Bar_Test => class GLO_Name => class BarNon_Test

Пример #4 Пример загрузки класса имён

class \Foo\Bar\Dummy => class \FooBar\Bar\Dummy =>

Вы можете заметить, что все папки с первой буквой заглавными, вы можете сделать их строчными, установив yaf.lowcase_path = On в php.ini.

Yaf_Loader также предназначен для загрузки классов MVC, и правило таково:

Пример #5 Пример загрузки класса MVC

Controller Classes => Model Classes => Plugin Classes =>
Yaf идентифицирует суффикс класса (это по умолчанию, вы также можете изменить его на префикс, изменив конфигурацию yaf.name_suffix), чтобы решить, является ли он классом MVC:

Пример #6 Классовые различия MVC

Controller Classes => Model Classes => Plugin Classes =>
несколько примеров:

Пример #7 Пример загрузки MVC

class IndexController class DataModel => class DummyPlugin => class A_B_TestModel =>

Замечание:

Начиная с 2.1.18, Yaf поддерживает автозагрузку контроллеров для стороны пользовательского скрипта (что означает автозагрузку, запускаемую пользовательским скриптом php, например: доступ к статическому свойству контроллера в Bootstrap или плагинах), но автозагрузчик только пытается найти скрипт класса контроллера в папке модуля по умолчанию, которая называется "APPLICATION_PATH/controllers/".

также на каталог будет влиять yaf.lowcase_path.

Обзор классов

classYaf_Loader {
protected$_local_ns;
protected$_library;
static$_instance;
private__construct()
publicautoload(): void
publicstaticgetInstance(): void
publicgetLibraryPath(bool$is_global = false): Yaf_Loader
publicgetNamespacePath(string$namespaces): string
publicgetNamespaces(): array
publicstaticimport(): void
publicisLocalName(): void
publicregisterNamespace(string|array$namespaces, string$path = ?): bool
publicsetLibraryPath(string$directory, bool$is_global = false): Yaf_Loader
}

Свойства

_local_ns

_library

По умолчанию это значение равно application.directory . "/library", вы можете изменить это либо в application.ini(application.library), либо вызвать Yaf_Loader::setLibraryPath()

_global_library

_instance

Содержание

To Top