热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Yaf零基础学习总结15-Yaf内建类之Yaf_Loader

Yaf_Loader类为Yaf提供了自动加载功能的全面解决方案。在第一次使用的时候,将检索Yaf_Application的实例
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, 最重要的是将会抛出一个非常有用的警告(对于找出一个类加载失败非常有用)。

所以如果我们还需要注册我们自己的自动加载函数注意上面这个情况,不过我们也可以将自己的自动加载函数注册到第一个,spl_autoload_register('my_autoloader',true,true);第三个参数设为true就表示spl_autoload_register() 会添加函数到队列之首,而不是队列尾部。

默认情况下,Yaf_Loader 收集所有library(类定义的脚本)储存进在 php.ini(yaf.library)定义的global library directory之中。如果你想使用 Yaf_Loader 搜索本地类(库)(定义在application.ini, 默认情况下,它是 application.directory . "/libraray"), 你需要使用 Yaf_Loader::registerLocalNameSpace() 注册本地类前缀。

Yaf_Loader类摘要


Yaf_Loader {
/* 属性 */
protected $_local_ns ;
protected $_library ;
protected $_global_library ;
static $_instance ;
/* 方法 */
public void autoload ( void )
public void clearLocalNamespace ( void )
private void __clone ( void )
public__construct ( void )
public static void getInstance ( void )
public Yaf_Loader getLibraryPath ([ bool $is_global = false ] )
public void getLocalNamespace ( void )
public static void import ( void )
public void isLocalName ( void )
public void registerLocalNamespace ([ mixed $prefix ] )
public Yaf_Loader setLibraryPath ( string $directory [, bool $is_global = false ] )
private void __sleep ( void )
private void __wakeup ( void )
}
成员方法列表

Yaf_Loader::autoload — The autoload purpose
Yaf_Loader::clearLocalNamespace — The clearLocalNamespace purpose
Yaf_Loader::__clone — The __clone 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::import — The import purpose
Yaf_Loader::isLocalName — The isLocalName purpose
Yaf_Loader::registerLocalNamespace — 注册本地类前缀
Yaf_Loader::setLibraryPath — 改变library路径
Yaf_Loader::__sleep — The __sleep purpose
Yaf_Loader::__wakeup — The __wakeup purpose


下面通过实例了解Yaf_Loader的加载函数规则(假设 APPLICATION_PATH 是 application.directory)

Example #1 Config example


// Assuming the following configure in php.ini:
yaf.libraray = "/global_dir"

//Assuming the following configure in application.ini
application.libraray = APPLICATION_PATH "/library"
假设以下本地名称空间已被注册:
Example #2 注册本地命名空间


registerLocalNameSpace(array("Foo", "Bar"));
     }
?>

自动加载例子:
Example #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
在PHP 5.3中,你可以使用命名空间:
Example #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类,响应的规则如下:

Example #5 MVC类加载例子


Controller Classes =>
// APPLICATION_PATH/controllers/

Model Classes =>
// APPLICATION_PATH/models/

Plugin Classes =>
// APPLICATION_PATH/plugins/

Yaf 通过识别一个类的后缀(这个是默认的,你也可以通过改变配置项 yaf.name_suffix 来将它改为通过前缀识别)来决定它是否是一个MVC类:

Example #6 MVC 类区别


Controller Classes =>
    // ***Controller

Model Classes =>
    // ***Model

Plugin Classes =>
    // ***Plugin
some examples:
Example #7 MVC loading example

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





推荐阅读
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • Todayatworksomeonetriedtoconvincemethat:今天在工作中有人试图说服我:{$obj->getTableInfo()}isfine ... [详细]
  • 数据库锁的分类和应用
    本文介绍了数据库锁的分类和应用,包括并发控制中的读-读、写-写、读-写/写-读操作的问题,以及不同的锁类型和粒度分类。同时还介绍了死锁的产生和避免方法,并详细解释了MVCC的原理以及如何解决幻读的问题。最后,给出了一些使用数据库锁的实际场景和建议。 ... [详细]
  • ps:写的第一个,不足之处,欢迎拍砖---只是想用自己的方法一步步去实现一些框架看似高大上的小功能(比如说模型中的toArraytoJsonsetAtt ... [详细]
  • 今天写一篇blog,已经多长时间没有更了,两个月了吧,没办法,现在银行开发,不能连外网,天天用虚拟机,真烦今天随手写点东西,主要是这两天对于springboot启动的分析,有所领悟 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • Asp.net Mvc Framework 七 (Filter及其执行顺序) 的应用示例
    本文介绍了在Asp.net Mvc中应用Filter功能进行登录判断、用户权限控制、输出缓存、防盗链、防蜘蛛、本地化设置等操作的示例,并解释了Filter的执行顺序。通过示例代码,详细说明了如何使用Filter来实现这些功能。 ... [详细]
  • 本文介绍了ASP.NET Core MVC的入门及基础使用教程,根据微软的文档学习,建议阅读英文文档以便更好理解,微软的工具化使用方便且开发速度快。通过vs2017新建项目,可以创建一个基础的ASP.NET网站,也可以实现动态网站开发。ASP.NET MVC框架及其工具简化了开发过程,包括建立业务的数据模型和控制器等步骤。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 本文讲述了作者从最初对软件工程的选择迷茫到逐渐喜欢并坚持学习的经历。作者在大学期间通过学习专业课和参与项目开发,不断挑战自己并取得成就感。虽然曾考虑过转专业和复读,但最终决定坚持学习软件工程,并为自己的未来努力奋斗。作者还提到了大学生活与自己最初的预期不同,但对此并没有太多抱怨。 ... [详细]
  • 使用J2SE模拟MVC模式开发桌面应用程序的工程包的介绍
    以我开发过的一个娱乐管理系统为例:下图为我系统的业务逻辑的MVC流程:下图为以Eclipse开发中各包的说明:转载于:https:blog ... [详细]
  • wpf+mvvm代码组织结构及实现方式
    本文介绍了wpf+mvvm代码组织结构的由来和实现方式。作者回顾了自己大学时期接触wpf开发和mvvm模式的经历,认为mvvm模式使得开发更加专注于业务且高效。与此同时,作者指出mvvm模式相较于mvc模式的优势。文章还提到了当没有mvvm时处理数据和UI交互的例子,以及前后端分离和组件化的概念。作者希望能够只关注原始数据结构,将数据交给UI自行改变,从而解放劳动力,避免加班。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • 本文讨论了在ASP中创建RazorFunctions.cshtml文件时出现的问题,即ASP.global_asax不存在于命名空间ASP中。文章提供了解决该问题的代码示例,并详细解释了代码中涉及的关键概念,如HttpContext、Request和RouteData等。通过阅读本文,读者可以了解如何解决该问题并理解相关的ASP概念。 ... [详细]
  • SpringMVC工作流程概述
    SpringMVC工作流程概述 ... [详细]
author-avatar
小鱼014999
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有