Клас 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_PATHapplication.directory):
Приклад #1 Приклад конфігурації
// Передбачаються такі налаштування в php.ini: yaf.library = "/global_dir"
/ / Передбачаються наступні налаштування в php.ini: application.library = APPLICATION_PATH "/library"
Передбачається, що зареєстровано такий локальний простір імен:
Приклад #2 Зареєструвати локальний простір імен
Loading...
Тоді приклад автозавантаження:
Приклад #3 Приклад завантаження класу
class Foo_Bar_Test => // APPLICATION_PATH/library/Foo/Bar/Test.php
class GLO_Name => // /global_dir/Glo/Name.php
class BarNon_Test // /global_dir/Barnon/Test.php
Приклад #4 Приклад завантаження класу імен
class\Foo\Bar\Dummy => // APPLICATION_PATH/library/Foo/Bar/Dummy.php
class\FooBar\Bar\Dummy => // /global_dir/FooBar/Bar/Dummy.php
Ви можете помітити, що всі папки з першою літерою заголовними, ви можете зробити їх малими, встановивши yaf.lowcase_path= On в php.ini.
Yaf_Loader також призначений для завантаження класів MVC, і правило таке:
Приклад #5 Приклад завантаження класу MVC
Controller Classes => // APPLICATION_PATH/controllers/
Model Classes => // APPLICATION_PATH/models/
Plugin Classes => // APPLICATION_PATH/plugins/
Yaf ідентифікує суфікс класу (за умовчанням, ви також можете змінити його на префікс, змінивши конфігурацію yaf.name_suffix), щоб вирішити, чи є він класом MVC:
Приклад #6 Класові відмінності MVC
Controller Classes => // ***Controller
Model Classes => // ***Model
Plugin Classes => // ***Plugin
кілька прикладів:
Приклад #7 Приклад завантаження MVC
class IndexController // APPLICATION_PATH/controllers/Index.php
class DataModel => // APPLICATION_PATH/models/Data.php
class DummyPlugin => // APPLICATION_PATH/plugins/Dummy.php
class A_B_TestModel => // APPLICATION_PATH/models/A/B/Test.php
Зауваження :
Починаючи з 2.1.18, Yaf підтримує автозавантаження контролерів для сторони скрипта користувача (що означає автозавантаження, що запускається користувальницьким скриптом php, наприклад: доступ до статичної властивості контролера в Bootstrap або плагінах). , яка називається "APPLICATION_PATH/controllers/".
також на каталог буде впливати yaf.lowcase_path
Огляд класів
class Yaf_Loader
{
/* Свойства */
protected
$_local_ns;
protected
$_library;
protected
$_global_library;
static
$_instance;
/* Методы */
private __construct()
public autoload(): void
public clearLocalNamespace(): void
public static getInstance(): void
public getLibraryPath(bool $is_global = false): Yaf_Loader
public getLocalNamespace(): void
public getNamespacePath(string $namespaces): string
public getNamespaces(): array
public static import(): void
public isLocalName(): void
public registerLocalNamespace(mixed $prefix): void
public registerNamespace(string|array $namespaces, string $path = ?): bool
public setLibraryPath(string $directory, bool $is_global = false): Yaf_Loader
}
Властивості
_local_ns
_library
За умовчанням це значення дорівнює application.directory . "/library", ви можете змінити це або application.ini(application.library), або викликати Yaf_Loader::setLibraryPath()
_global_library
_instance
Зміст
- Yaf_Loader::autoload - Призначення autoload
- Yaf_Loader::clearLocalNamespace— Призначення clearLocalNamespace
- Yaf_Loader::__construct - Призначення__construct
- Yaf_Loader::getInstance— Призначення getInstance
- Yaf_Loader::getLibraryPath— Отримує шлях до бібліотеки
- Yaf_Loader::getLocalNamespace— Призначення getLocalNamespace
- Yaf_Loader::getNamespacePath— Отримує шлях зареєстрованого простору імен
- Yaf_Loader::getLocalNamespace— Отримує всю інформацію про зареєстровані простори імен
- Yaf_Loader::import - Призначення import
- Yaf_Loader::isLocalName— Призначення isLocalName
- Yaf_Loader::registerLocalNamespace - Реєструє префікс локального класу
- Yaf_Loader::registerNamespace— Реєструє простір імен шляхом пошуку
- Yaf_Loader::setLibraryPath— Змінює шлях до бібліотеки