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 来更改为前缀)来判断它是否为 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