前面两篇博客分别讲述了PHP自带的类加载和composer中类的自动加载,其实Yaf框架也实现了基于PSR0和PSR4的类的自动加载。根据我对Yaf下类的自动加载方式的理解写下这篇博客。由于接触Yaf框架时间不长,因此如果有不对之处,还望大家不吝指教。

  要理解Yaf框架下类的自动加载方式,还是需要PSR0和PSR4规范作为基础,对于PSR0和PSR4的具体规范,本文不做详细解释。Yaf下类的自动加载可以分为全局类和本地类的自动加载、与MVC框架相关的类的自动加载,下面分别做相应的介绍。

  一、Yaf中全局类、本地类的自动加载

  首先,说明一下本文中所说的全局类和本地类的区别。

  全局类是所谓的公司或部门级别的现有类库,该类可以在多个项目中共同使用,而不只在当前的项目中可用。这些类的路径一般是通过在yaf.liabrary在php的配置文件php.ini中指定。

  本地类指的是只应用于本项目的类,这些类所在的路径也可以通过在Yaf的配置文件中通过ap.liabrary指定。在Yaf中可以通过Yaf_Loader::registerLocalNamespace()申明那些本地类的前缀,那么带有该前缀的类,需要在本地的类库中加载。

  无论是全局类还是本地类,Yaf中使用PSR0规则进行加载的时候,类名中的"_"都会被转换成目录分隔符“/”。

  根据所看过的博客,全局类和本地类的加载规则可总结如下:

  1. 如果指定yaf.library和产品的application.ini中指定ap.library,那么无论是否在application.ini中指定了ap.library.namespace或者通过Yaf_Loader::registerLocalNamespace()注册本地的命名空间前缀,那么在程序中遇到未定义的类的时候,会自动到ap.directory.library中寻找对应的类。(ap.directory.library是Yaf必不可少的配置,该配置指定了项目的绝对路径地址)
  2. 如果在产品的application.ini文件中指定了本地的ap.library,但是却没有通过ap.library.namespace或者Yaf_Loader::registerLocalNamespace()指定本地的命名空间,那么无论是都指定了yaf.library,都会去yaf.library中加载类;
  3. 只有在指定了本地类的ap.library,指定了本地的命名空间且类名中包含有命名空间的前缀的时候,才回去本地的类库中加载对应的类;否则到yaf.library中指定的文件中加载对应的类。指定命名空间的方式为:
$loader = Yaf_Loader::getIgnstance();
$loader->registerLocalNamespace(array("local"));

  或者在项目中的conf/application.ini中指定ap.library.namespace为local确定本地的命名空间。

  下面以类名local_sublocal_test.php说明上面三种情况分别对应的加载规则。

  1. 这种情况下,ap.directory一般在application.ini指定为APP_PATH(APP_PATH在入口文件index.php中定义),此时的加载路径为APP_PATH/library/local/sublocal/test.php;
  2. 这种情况下加载路径一般是yaf.library+'/local/sublocal/test.php';
  3. 这种情况下加载路径为ap.library+'/local/sublocal/test.php';

  二、与MVC框架相关的类的自动加载

  与MVC框架相关的类的的自动加载是通过使用特定的前缀或者后缀名确定类的加载路径的,通过类与其所在的文件的特定映射完成类的自动加载:类名=文件名+后缀。

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

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

  对于和V相关的视图文件不属于本文的讨论范围。

  总结:本文是对Yaf中类的自动加载规则的总结,由于目前使用到的最多的就是和MVC相关的类的加载和在conf/application.ini中指定加载路径的类,因此只讨论这两种情况。其他的在项目路径中加载别的类的方式,在以后用到之后再和大家一起讨论。

Yaf框架下类的自动加载的更多相关文章

  1. YII框架的类自动加载机制

    YII之所以能实现快速的自动加载类文件,是因为它通过两种途径来实现. 先看文件 vendor\yiisoft\yii2\BaseYii.php 里面的 autoload 方法 public stati ...

  2. 010.CI4框架CodeIgniter, autoload自动加载自己的helper函数类

    01.自己定义了一个helper类,里面有个函数用来输出 02.定义一个Controller基本类,我们以后用到的Controllers类都继承自这个类.其中自动加载helper函数如图所示: 03. ...

  3. ASP.NET MVC搭建项目后台UI框架—11、自动加载下拉框查询

    ASP.NET MVC搭建项目后台UI框架—1.后台主框架 需求:在查询记录的时候,输入第一个字,就自动把以这个字开头的相关记录查找出来,输入2个字就过滤以这两个子开头的记录,依次类推. 突然要用到这 ...

  4. 框架技术--Spring自动加载配置

    今天项目中遇到一个问题,一个方法在服务启动后会自动被执行,查看了下配置未发现有定时的配置.但是后来发现是spring配置了启动时默认加载了方法. 代码: <?xml version=" ...

  5. PHP中类自动加载的方式

    最近在学习composer,发现从接触PHP到现在已经遇到了三种关于PHP中类的自动加载方式,这其中包括PHP自带的类的自动加载方式.PHP的第三方的依赖管理工具composer的加载方式以及PHP的 ...

  6. Yii2的深入学习--自动加载机制

    Yii2 的自动加载分两部分,一部分是 Composer 的自动加载机制,另一部分是 Yii2 框架自身的自动加载机制. Composer自动加载 对于库的自动加载信息,Composer 生成了一个  ...

  7. Yii2的深入学习--自动加载机制(转)

    Yii2 的自动加载分两部分,一部分是 Composer 的自动加载机制,另一部分是 Yii2 框架自身的自动加载机制. Composer自动加载 对于库的自动加载信息,Composer 生成了一个  ...

  8. PHP 命名空间以及自动加载(自动调用的函数,来include文件)

    这篇文章的目的是记录 1. php中的自动加载函数 __autoload(), 和 spl_autoload_register()函数, 2 .php中命名空间的使用. 一.当不使用命名空间的时候 a ...

  9. 阻止YII 1.0自动加载内置JQUERY库

    有些时候我们会在项目中用到很多js库, 因为Yii 1.0框架会默认自动加载一些自带核心库, 很容易引起冲突问题, 下面的代码就展示了如何在Yii 1.0框架下取消jQuery自动加载. Open C ...

随机推荐

  1. fastdfs 安装配置

      介绍文档   1.安装 # wget # tar xf download # cd FastDFS/ # ./make.sh 运行文件 有报错信息 compilation terminated. ...

  2. linux下vi命令修改文件及保存的使用方法

    进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi n filename :打开文件,并将光标置于第n行首 vi filename :打开文件,并将光标置于一行首 v ...

  3. Java Web 编程

    Java Web 编程 21天学通JAVA-WEB开发:http://files.cnblogs.com/files/maven-chao/Java_Web.zip

  4. web异常流量定位:iftop+tcpdump+wireshark

    一个简单的运维小经验. 场景:web服务器出现异常流量,web集群内部交互出现大流量,需要定位具体的http请求,以便解决问题. 目的:找出产生大流量的具体http请求. 工具:        ift ...

  5. XE8 (RTM) Android SDK 更新安装(转)

    原地址:http://www.cnblogs.com/onechen/p/4379924.html 适用:XE8 Android 平台 问题:安装 XE8 RTM 时,如果勾选了 Android SD ...

  6. ubuntu中常用软件的安装

    1.有道词典 1.百度有道词典,进入有道首页,点"下载词典客户端",下载对应版本. 2.打开终端,进入下载目录,输入sudo dpkg -i youdao-dict_1.0.2~u ...

  7. ListView addHeaderView 对 position 的影响

    1. 在 public View getView(int position, View convertView, ViewGroup parent) 中position 和 是否有headerView ...

  8. ruby生成随机成绩

    生成16个86到99范围内的值,并且每个成绩打印一行,这样就可以复制粘贴到Excel中! 16.times {|x| puts (86..99).to_a.sample}    

  9. PowerProfile.java与power_profile.xml

    转载自http://blog.csdn.net/green1900/article/details/42427871 现在诸多关于电池管理的应用做的极其绚烂,可实现如耗电应用排行.剩余时间计算.关闭耗 ...

  10. win10 下 gulp-sass 无法使用的解决

    参考链接: http://stackoverflow.com/questions/28409100/try-reinstalling-node-sass-on-node-0-12 解决方法: npm ...