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

목차