ConFoo 2025

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

//Предполагаются следующие настройки в php.ini:
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 =>
  // 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 static getInstance(): void
public getLibraryPath(bool $is_global = false): Yaf_Loader
public getNamespacePath(string $namespaces): string
public getNamespaces(): array
public static import(): void
public isLocalName(): 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

Содержание

Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top