Класс 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
Начиная с PHP 5.3, вы можете использовать пространство имен:

Пример #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.

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

Yaf_Loader {
/* Свойства */
protected $_local_ns ;
protected $_library ;
protected $_global_library ;
static $_instance ;
/* Методы */
public autoload ( void ) : void
public clearLocalNamespace ( void ) : void
private __construct ( void )
public static getInstance ( void ) : void
public getLibraryPath ([ bool $is_global = FALSE ] ) : Yaf_Loader
public getLocalNamespace ( void ) : void
public getNamespacePath ( string $namespaces ) : string
public getNamespaces ( void ) : array
public static import ( void ) : void
public isLocalName ( void ) : 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

Содержание

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top