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,除非有一些 library 有自己的自动加载机制,并且是无法重写的。

默认情况下,Yaf_Loader 假设所有 library(类定义的脚本)储存进在 php.ini(yaf.library)定义的全局库目录中。

如果使用 Yaf_Loader本地库目录(在 application.ini 中定义,默认是 application.directory . "/library")搜索一些类(库),需要使用 Yaf_Loader::registerLocalNameSpace() 注册本地类前缀

看看一些示例(假设 APPLICATION_PATH 是 application.directory):

示例 #1 Config example

// Assuming the following configure in php.ini: yaf.library = "/global_dir"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 => class GLO_Name => class BarNon_Test

示例 #4 加载命名空间类示例

class \Foo\Bar\Dummy => class \FooBar\Bar\Dummy =>

可能会注意到所有文件夹名字的首字母是大写的,可以通过在 php.ini 中设置 yaf.lowcase_path = On 来将它们设为小写。

Yaf_Loader 也是设计来加载 MVC 类,响应的规则如下:

示例 #5 MVC 类加载示例

Controller Classes => Model Classes => Plugin Classes =>
Yaf 通过识别类的后缀(这个是默认的,也可以通过改变配置项 yaf.name_suffix 来更改为前缀)来决定它是否是 MVC 类:

示例 #6 MVC 类区别

Controller Classes => Model Classes => Plugin Classes =>
一些示例:

示例 #7 MVC 加载示例

class IndexController class DataModel => class DummyPlugin => class A_B_TestModel =>

注意:

自 2.1.18 起,Yaf 支持用户脚本端的 Controller 自动加载(这意味着由用户 php 脚本触发自动加载,例如:访问 Bootstrap 或 Plugins 中的控制器静态属性),但自动加载器仅尝试在控制器类脚本下定位默认模块文件夹,即“APPLICATION_PATH/controllers/”。

此外,该目录将受 yaf.lowcase_path 的影响。

类摘要

classYaf_Loader {
protected$_local_ns;
protected$_library;
static$_instance;
private__construct()
publicautoload(): void
publicstaticgetInstance(): void
publicgetLibraryPath(bool$is_global = false): Yaf_Loader
publicgetNamespacePath(string$namespaces): string
publicgetNamespaces(): array
publicstaticimport(): void
publicisLocalName(): void
publicregisterNamespace(string|array$namespaces, string$path = ?): bool
publicsetLibraryPath(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