Клас 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

Зміст