Yet Another Framework Yaf_Loader 클래스
(Yaf >=1.0.0)
소개
Yaf_Loader는 Yaf를 위한 포괄적인 자동 로딩 솔루션을 소개합니다.
Yaf_Application의 인스턴스가 처음 검색될 때 Yaf_Loader는 싱글톤을 인스턴스화하고 spl_autoload에 자신을 등록합니다. Yaf_Loader::getInstance()를 사용하여 인스턴스를 검색합니다.
Yaf_Loader는 클래스를 한 번만 로드하려고 시도합니다. 실패하면 yaf.use_spl_auload에 의존합니다. 이 구성이 On인 경우 Yaf_Loader::autoload()는 false
를 반환하므로 다른 자동 로드 함수에 기회를 제공합니다. Off(기본값)이면 Yaf_Loader::autoload()가 true
를 반환하고 더 중요한 것은 매우 유용한 경고가 트리거된다는 것입니다(클래스를 로드할 수 없는 이유를 찾는 데 매우 유용함).
메모: 일부 라이브러리에 자체 자동 로드 메커니즘이 있고 다시 작성할 수 없는 경우가 아니면 yaf.use_spl_autoload를 Off로 유지하십시오.
기본적으로 Yaf_Loader는 php.ini(yaf.library)에 정의된 전역 라이브러리 디렉토리에 모든 라이브러리(클래스 정의 스크립트) 저장을 가정합니다.
Yaf_Loader가 로컬 클래스 디렉토리(application.ini에 정의되어 있으며 기본적으로 application.directory . "/library")에서 일부 클래스(라이브러리)를 검색하려면 Yaf_Loader:registerLocalNameSpace()를 사용하여 클래스 접두사를 등록해야 합니다.
몇 가지 예를 살펴보겠습니다(APPLICATION_PATH가 application.directory라고 가정).
예제 #1 구성 예
// Assuming the following configure in php.ini: yaf.library = "/global_dir" //Assuming the following configure in application.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
첫 글자가 대문자인 폴더는 모두 php.ini에서 yaf.lowcase_path = On으로 설정하여 소문자로 만들 수 있습니다.
Yaf_Loader는 MVC 클래스를 로드하도록 설계되었으며 규칙은 다음과 같습니다.
예제 #5 MVC 클래스 로딩 예시
Controller Classes => // APPLICATION_PATH/controllers/ Model Classes => // APPLICATION_PATH/models/ Plugin Classes => // APPLICATION_PATH/plugins/
Yaf는 클래스의 접미사를 식별합니다(기본적으로 yaf.name_suffix 구성을 변경하여 접두사로 변경할 수도 있음).
예제 #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 스크립트에 의해 자동 로드가 트리거됨을 의미합니다. 예: 부트스트랩 또는 플러그인에서 컨트롤러 정적 속성에 액세스). "APPLICATION_PATH/controllers/"인 기본 모듈 폴더.
또한 디렉토리는 yaf.lowcase_path의 영향을 받습니다.
클래스 개요
class Yaf_Loader {
/* Properties */
protected $_local_ns;
protected $_library;
protected $_global_library;
static $_instance;
/* Methods */
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
}
Properties
- _local_ns
- _library
- 기본적으로 이 값은 application.directory . "/library", application.ini(application.library)에서 변경하거나 Yaf_Loader::setLibraryPath()를 호출할 수 있습니다.
- _global_library
- _instance
목차
- Yaf_Loader::autoload — The autoload purpose
- Yaf_Loader::clearLocalNamespace — The clearLocalNamespace purpose
- Yaf_Loader::__construct — The __construct purpose
- Yaf_Loader::getInstance — The getInstance purpose
- Yaf_Loader::getLibraryPath — Get the library path
- Yaf_Loader::getLocalNamespace — The getLocalNamespace purpose
- Yaf_Loader::getNamespacePath — Retieve path of a registered namespace
- Yaf_Loader::getLocalNamespace — Retrive all register namespaces info
- Yaf_Loader::import — The import purpose
- Yaf_Loader::isLocalName — The isLocalName purpose
- Yaf_Loader::registerLocalNamespace — Register local class prefix
- Yaf_Loader::registerNamespace — Register namespace with searching path
- Yaf_Loader::setLibraryPath — Change the library path