首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Yaf_Loader (class)

介绍

(Yaf >=1.0.0)

Yaf_Loader为Yaf引入了一个全面的自动加载解决方案。

Yaf_Application实例第一次被检索时,Yaf_Loader将实例化一个singleton,并将自己注册到spl_autoload。您使用Yaf_Loader :: getInstance()检索实例

Yaf_Loader尝试只加载一个类,如果失败,则依赖于yaf.use_spl_auload,如果此配置开启,则Yaf_Loader :: autoload()将返回FALSE,从而给予其他自动加载函数的机会。如果它是Off(默认),则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配置示例

代码语言:javascript
复制
// Assuming the following configure in php.ini:
yaf.library = "/global_dir"

//Assuming the following configure in application.ini
application.library = APPLICATION_PATH "/library"

假设注册了以下本地名称空间:

示例#2注册localnamespace

代码语言:javascript
复制
<?php
class Bootstrap extends Yaf_Bootstrap_Abstract{
     public function _initLoader($dispatcher) {
          Yaf_Loader::getInstance()->registerLocalNameSpace(array("Foo", "Bar"));
     }
?>

以下为自动加载的例子:

示例#3加载类示例

代码语言:javascript
复制
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加载命名空间类示例

代码语言:javascript
复制
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类加载示例

代码语言:javascript
复制
Controller Classes =>
// APPLICATION_PATH/controllers/

Model Classes =>
// APPLICATION_PATH/models/

Plugin Classes =>
// APPLICATION_PATH/plugins/

Yaf标识一个类的后缀(这是默认情况下,你也可以通过改变configure yaf.name_suffix改变为前缀)来决定它是否是一个MVC类:

示例#6 MVC类的区别

代码语言:javascript
复制
Controller Classes =>
    // ***Controller

Model Classes =>
    // ***Model

Plugin Classes =>
    // ***Plugin

一些例子:

示例#7 MVC加载示例

代码语言:javascript
复制
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或Plugins中的控制器静态属性),但自动加载器仅尝试查找控制器类脚本在默认模块文件夹下,即“APPLICATION_PATH / controllers /”。

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

类简介

Yaf_Loader {

/ *属性* /

protected $_local_ns ;

protected $_library ;

protected $_global_library ;

static $_instance ;

/* 方法 */

代码语言:javascript
复制
public void autoload ( void )
代码语言:javascript
复制
public void clearLocalNamespace ( void )
代码语言:javascript
复制
private void __clone ( void )
代码语言:javascript
复制
private __construct ( void )
代码语言:javascript
复制
public static void getInstance ( void )
代码语言:javascript
复制
public Yaf_Loader getLibraryPath ([ bool $is_global = false ] )
代码语言:javascript
复制
public void getLocalNamespace ( void )
代码语言:javascript
复制
public static void import ( void )
代码语言:javascript
复制
public void isLocalName ( void )
代码语言:javascript
复制
public void registerLocalNamespace ( mixed $prefix )
代码语言:javascript
复制
public Yaf_Loader setLibraryPath ( string $directory [, bool $is_global = false ] )
代码语言:javascript
复制
private void __sleep ( void )
代码语言:javascript
复制
private void __wakeup ( void )

}

属性

_local_ns_library

默认情况下,该值是application.directory。“/ library”,你可以在application.ini(application.library)中改变它,或者调用Yaf_Loader :: setLibraryPath()

_global_library_instance

目录

  • Yaf_Loader :: autoload - 自动加载的目的
  • Yaf_Loader :: clearLocalNamespace - clearLocalNamespace的用途
  • Yaf_Loader :: __ clone - __clone的用途
  • Yaf_Loader :: __构造 - __construct的目的
  • Yaf_Loader :: getInstance - getInstance的用途
  • Yaf_Loader :: getLibraryPath - 获取库路径
  • Yaf_Loader :: getLocalNamespace - getLocalNamespace的用途
  • Yaf_Loader :: import - 导入目的
  • Yaf_Loader :: isLocalName - isLocalName的用途
  • Yaf_Loader :: registerLocalNamespace - 注册本地类前缀
  • Yaf_Loader :: setLibraryPath - 更改库路径
  • Yaf_Loader :: __ sleep - __sleep的用途
  • Yaf_Loader :: __wakeup - __wakeup目的

← Yaf_View_Simple::setScriptPath

Yaf_Loader::autoload →

扫码关注腾讯云开发者

领取腾讯云代金券