Yaf零基础学习总结5-Yaf类的自动加载

框架的一个重要功能就是类的自动加载了,在第一个demo的时候我们就约定自己的项目的目录结构,框架就基于这个目录结构来自动加载需要的类文件。

Yaf在自启动的时候, 会通过SPL注册一个自己的Autoloader, 出于性能的考虑, 对于框架相关的MVC类, Yaf Autoloader只以目录映射的方式尝试一次.

具体的目录映射规则如下:

对于控制器 Controller 默认模块下为{项目路径}/controllers/, 否则为{项目路径}/modules/{模块名}/controllers 比如IndexController,这自动加载文件 {项目目录}/Controllers/Index.php

对于Model 加载路径为{项目目录}/models/ 类似比如UserModel则自动加载{项目目录}/models/User.php

其它规则比如actions,plugin也都类似

而对于非框架MVC相关的类, Yaf支持全局类和自身类的两种加载方式, 并且Yaf支持大小写敏感和不敏感两种方式来处理文件路径.

全局类和自身类(本地类)

Yaf为了方便在一台服务器上部署的不同产品之间共享公司级别的共享库, 支持全局类和本地类两种加载方式. 
全局类是指, 所有产品之间共享的类, 这些类库的路径是通过ap.library在php.ini(当然,如果PHP在编译的时候, 支持了with-config-file-scan-dir,那么也可以写在单独的ap.ini中)

而本地类是指, 产品自身的类库, 这些类库的路径是通过在产品的配置文件中, 通过ap.library配置的.在Yaf中, 通过调用Yaf_Loader的registerLocalNamespace方法, 来申明那些类前缀是本地类, 即可.

注意:在use_spl_autoload关闭的情况下, Yaf Autoloader在一次找不到的情况下, 会立即返回, 而剥夺其后的自动加载器的执行机会.

Yaf中类的加载规则

类的加载规则, 都是一样的: Yaf规定类名中必须包含路径信息, 也就是以下划线"_"分割的目录信息. Yaf将依照类名中的目录信息, 完成自动加载. 如下的例子, 在没有申明本地类的情况下:

一个映射的例子Zend_Dummy_Foo 
//Yaf将在如下路径寻找类Foo_Dummy_Bar 
{类库路径(php.ini中指定的ap.library)}/Foo/Dummy/Bar.php

而, 如果通过如下方式调用了registerLocalNamespace:注册本地类

  1. //申明, 凡是以Foo和Local开头的类, 都是本地类
  2. $loader = Yaf_Loader::getIgnstance();
  3. $loader->registerLocalNamespace(array("Foo", "Local"));

那么对于刚才的例子, 将会在如下路径寻找Foo_Dummy_Bar 
//Yaf将在如下路径寻找类Foo_Dummy_Bar 
{类库路径(conf/application.ini中指定的ap.library)}/Foo/Dummy/Bar.php

通过这个例子,大家应该知道了Yaf的类的加载规则了,也能区分全局类和本地类

参考来源: 
Yaf零基础学习总结5-Yaf类的自动加载
http://www.lai18.com/content/407152.html

Yaf零基础学习总结5-Yaf类的自动加载的更多相关文章

  1. Yaf零基础学习总结3-Hello Yaf

    Yaf零基础学习总结3-Hello Yaf 上一次我们已经学习了如何安装yaf了,准备工作做好了之后我们来开始实际的编码了,码农都知道一个经典的语句就是“Hello World”了,今天我们开始入手Y ...

  2. Yaf零基础学习总结4-Yaf的配置文件

    在上一节的hello yaf当中我们已经接触过了yaf的配置文件了, Yaf和用户共用一个配置空间, 也就是在Yaf_Application初始化时刻给出的配置文件中的配置. 作为区别, Yaf的配置 ...

  3. Yaf零基础学习总结2-Yaf框架的安装

    接着上一篇文章<Yaf零基础学习总结1-Yaf框架简介>我们对Yaf框架有那么一个大概的了解了,但是对于程序员来说,那些文字都是表面的,他们最想的就是开始敲代码了.当然这也是学习Yaf框架 ...

  4. PHP面向对象学习-属性 类常量 类的自动加载 构造函数和析构函数 访问控制(可见性)

    在类的成员方法里面,可以用 ->(对象运算符):$this->property(其中 property 是该属性名)这种方式来访问非静态属性.静态属性则是用 ::(双冒号):self::$ ...

  5. thinkphp系列:类的自动加载是如何设计的

    在使用框架开发时,可以发现框架有很多核心类,却很少看到显示的引入某个文件的代码,这是因为框架都采用了类的自动加载机制,即使用到类时,框架会自动找到该类所在文件的位置并引入该文件.为了更容易看出代码思路 ...

  6. final关键字,类的自动加载,命名空间

    final关键字 1.final可以修饰方法和类,但是不能修饰属性: 2.Final修饰的类不能被继承: 3.Fina修饰的方法不能被重写,子类可以对已被final修饰的父类进行访问,但是不能对父类的 ...

  7. PHP面向对象----- 类的自动加载

    1.类的自动加载 spl_autoload_register函数 test.php <?php spl_autoload_register('autoload'); // require_onc ...

  8. 浅析PHP类的自动加载和命名空间

    php是使用require(require_once)和include(include_once)关键字加载类文件.但是在实际的开发工程中我们基本上不会去使用这些关键字去加载类. 因为这样做会使得代码 ...

  9. Yaf零基础学习总结1-Yaf框架简介

    从今天开始,给大家讲解下yaf框架,讲解之前肯定要了解下yaf是个什么东西,当然,从标题我们已经知道yaf是个PHP框架了,也许大家对于PHP框架并不陌生,一般PHP程序员用过的框架至少有一两个吧,国 ...

随机推荐

  1. 安卓开发 想要获取某个View的高度(我是在做滚动浮层的时候用到的)

    1.activity中有个onWindowFocusChanged()方法,可以获取控件的大小,别的地方可能会调用过早导致获取不到实际的大小 @Override public void onWindo ...

  2. mysql 计算日期差

    有两个途径可获得   1.利用TO_DAYS函数   select to_days(now()) - to_days('20140831')   2.利用DATEDIFF函数   select dat ...

  3. 使用javascript实现贪吃蛇游戏

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  4. maven学习(5)-maven中常见错误

    maven报错非法字符:\65279 错误 开发中一个项目很早就报这个错,maven报错非法字符:\ 错误, 开发过程中偶尔会遇到,今天终于下决心要解决这个问题 编译java 文件的时候,有些java ...

  5. .net类库里ListView的一个BUG

    今天在CSDN论坛里看一个帖子,说是在ListView中添加了条目后第一行内容不显示,为了还原他的问题我写了以下代码. private void LoadFiles(DirectoryInfo dir ...

  6. gulp插件gulp-ruby-sass和livereload插件

    gulp-ruby-sass是gulp的一个插件,主要是用来实现sass编译,livereload插件主要是实现文件保存时浏览器自动刷新,避免了手动f5的频繁的操作 准备工作:chrome浏览器安装l ...

  7. hash 表 | | jzoj 1335 | | 脑残+手残 | | 集合的关系

    给定两个集合A.B,集合内的任一元素x满足1 ≤ x ≤ 10^9,并且每个集合的元素个数不大于10^5.我们希望求出A.B之间的关系. 给定两个集合的描述,判断它们满足下列关系的哪一种:A是B的一个 ...

  8. 【bzoj3211】花神游历各国

    Description   Input   Output 每次x=1时,每行一个整数,表示这次旅行的开心度 Sample Input 4 1 100 5 551 1 2 2 1 2 1 1 2 2 2 ...

  9. EFM32外设模块—USART V1.00

    http://wenku.baidu.com/link?url=hx-pumUzdpS-AbD1OhEW11Jl6H8wex2DNsv4IcZwrgL-drwuUzZ6E1L64fCnAfdUOObK ...

  10. QQ屠龙转世-挖矿

    ※◆☆★☆◆※欢迎使用QQ屠龙转世辅助,如有疑问请联系作者QQ:82850696*2*测试版已停用*1*2014-8-27 14:05:59*哈密*E2873D0137C6D04F42E088AA46 ...