Zend Framework 自动加载类的实现方法
Zend Framework中实现自动加载类。网上查了很多,有好几种。本文收集了常用的3种,
第一种如下:
方法很简单,举例说明。比如想要在models目录下的类可以自动加载。
先在index.php中修改include path。
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(realpath(APPLICATION_PATH . '/../library'),get_include_path(),realpath(APPLICATION_PATH . '/models')
)));
上述代码里,添加包含了models的目录。
然后在Bootstrap.php文件下,实现一个资源方法。
protected function _initAutoload()
{$autoloader = Zend_Loader_Autoloader::getInstance();$autoloader->setFallbackAutoloader(true);
}
然后在models里可以加一个类。注意文件名和类名的关系(类名要加上路径名,用_隔开。下有示例),不然自动加载会失败。比如加一个Nav.php的文件。内容如下:
<?php
class Nav {
public static function getNav() {echo "pfpf";
}
}
?>
在某个controller中,直接使用Nav类。
Nav::getNav();
如果models中需要加文件夹,那么相应的类名也要有更改。举例:
在models下有新建一个newFolder文件夹,在该文件夹下面新建一个文件MKA,那么这个文件中的类名就应该是newFolder_MKA这种约定。
<?php
class newFolder_MKA {
public static function getNav() {
echo "<br>MKA";
}
}
?>
默认的,index.php中已经包含了 realpath(APPLICATION_PATH . '/../library')这个路径,即可以直接把类放到这个文件夹中,既可以实现自动加载。
————————————————————————————————————————————————
还有一种方法,和上述方法类似,只不过在资源方法中实现注册命名空间(这里命名空间的概念和C#中命名空间概念不太一样,这里指的是类名前面的前缀和包含类的文件夹)。假设要自动加载的类在library中,默认的index.php中的includepath已经包含了。
那么这些类名也要按约定加上命名空间前缀,在My目录下的加上My_,没有目录的就加_。这样的话,资源方法中只需注册一下命名空间就行了。
protected function _initAutoload ()
{Zend_Loader_Autoloader::getInstance()->registerNamespace('My_')->registerNamespace('_');
}
然后就可以直接调用My_Book类和_Pen类了。
My_Book::show();
_Pen::show();
甚至,你也不需要在资源方法中加代码,只需在配置文件application.ini中加入如下指令即可:
autoloaderNamespaces[] = "My_" autoloaderNamespaces[] = "_"
————————————————————————————————————————————————
还有一种方法 ,采用Zend_Loader_Autoloader_Resource类。
看例子,在Bootstrap.php文件下,写一个资源方法。
protected function _initAutoload()
{$loader = new Zend_Loader_Autoloader_Resource(array(
'basePath' => APPLICATION_PATH ,//这里指定任何路径,指定路径后就在这个路径下找
'namespace' => 'Foo',//这里的命名空间值的是类的前缀,比如这个就是类的前缀是Foo_开头的。));$loader->addResourceType('wwww', 'models', 'Modelxxx');//这个方法三个参数,分别是资源类型(貌似可以随便填),路径,子命名空间//下面是源码中对于这3个参数的说明/*** Add resource type** @param string $type identifier for the resource type being loaded* @param string $path path relative to resource base path containing the resource types* @param null|string $namespace sub-component namespace to append to base namespace that qualifies this resource type* @return Zend_Loader_Autoloader_Resource*/
}
例如上面的例子,它会在APPLICATION_PATH\models\目录下,自动加载Foo_Modelxxx_这样的类。
具体看下面的例子,目录结构图如下:
那现在的目标是能够自动加载没有folder中的类。
对应的,第一步,指定好自动加载的basepath,即'basePath' => APPLICATION_PATH.'/myfolder',指定一个命名空间Myns。
注意命名空间的首字母大写,不然报错。
接着,加载资源类型,指定更细节的路径和命名空间。
所有的代码如下:
protected function _initAutoload()
{$loader = new Zend_Loader_Autoloader_Resource(array(
'basePath' => APPLICATION_PATH.'/myfolder',
'namespace' => 'Myns'));$loader->addResourceType('mytype', '/', 'Mysubns')->addResourceType('mytype2', 'mysubfolder', 'Mysubns2');
}
其中注意命名空间首字母大写,路径要指对,然后具体的类名要符合响应的规则。比如例子中的类名的格式就是
命名空间_子命名空间_类名的格式。
具体如下:
<?php
class Myns_Mysubns2_Myclass2
{public static function show(){
echo "myns_mysubns2_myclass2","<br>";}
}?>
<?php
class Myns_Mysubns_Myclass
{public static function show(){
echo "myns_mysubns_myclass","<br>";}
}
?>
然后调用的是直接
Myns_Mysubns_Myclass::show(); Myns_Mysubns2_Myclass2::show();
就可以了。
Zend Framework 自动加载类的实现方法相关推荐
- php加载autoload,php自动加载类__autoload()的方法_PHP教程
本文章来给大家简单的介绍一下关于php自动加载类__autoload()的方法,希望此方法对各位同学会有所帮助哦. 作用:当在程序中需要实例化一个类,刚好这这类又不是在本文件中,则需要用包含函数将外部 ...
- PHP自动加载类和方法,在PHP中自动加载类的最佳方法
请,如果您需要自动加载类 – 使用命名空间和类名称约定与SPL自动加载,它将节省您的重构时间. 当然,您将需要将每个类作为对象进行实例化. 谢谢. 或者像这样(我在我的一个项目中): spl_auto ...
- yii2 引入php文件,Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
本文实例分析了Yii2中YiiBase自动加载类.引用文件的方法.分享给大家供大家参考,具体如下: 在Yii2中这个函数是用来加载类的,没有直接引用文件的相关实现.但是这个也可以用来引用文件. pub ...
- php zend 自动补全,Zend Framework自动加载、简单路由配置(Bootstrap.php)
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { /* * 自动加载 */ protected function _init ...
- php的_autoload函数实现自动加载类的使用
本文章详细的以实例来介绍了关于php _autoload自动加载类的用法以及如何使用_autoload来减少程序上的include和require的调用哦. 在使用PHP的OO模式开发系统时,通常大家 ...
- PHP自动加载类的实例
我们在做PHP开发的时候,有的时候需要一个一个的文件引入感到实在是烦,其实我们可以利用PHP的一个函数 __autoload($class) 来进行自动载入!当然方法有很多,下面例举一法,具体方法如下 ...
- Tomcat 7 自动加载类及检测文件变动原理
在一般的 web 应用开发里通常会使用开发工具(如 Eclipse.IntelJ )集成 tomcat ,这样可以将 web 工程项目直接发布到 tomcat 中,然后一键启动.经常遇到的一种情况是直 ...
- php 类自动执行方法,php类讲解8:PHP 自动加载类 __autoload() 方法
__autoload() 在实际项目中,不可能把所有的类都写在一个 PHP 文件中,当在一个 PHP 文件中需要调用另一个文件中声明的类时,就需要通过 include 把这个文件引入.不过有的时候,在 ...
- 说一下php的自动加载,php的_autoload函数实现自动加载类的使用
本文章详细的以实例来介绍了关于php _autoload自动加载类的用法以及如何使用_autoload来减少程序上的include和require的调用哦. 在使用PHP的OO模式开发系统时,通常大家 ...
最新文章
- MySQL数据库开发规范-EC
- APUE和UNP怎么学?
- ## *将以下学生成绩数据,存放在Hdfs上,使用Spark读取完成下面分析**
- 探秘早期的FPGA内部构造
- 输入对话框基于PyQt4的输入对话框
- Debug经验总结:优化、程序员和概率
- 《DSP using MATLAB》Problem 7.2
- SiftGPU:编译SiftGPU出现问题-无法解析的外部符号 glutInit
- VueI18n的应用
- Linux 练习题-3文件与磁盘 问答
- Qt 第二步 熟悉文件结构组成(二)
- commons-lang常用工具类StringEscapeUtils使用
- Android Studio 3.3发布:官方支持导航编辑器
- seay代码审计mysql插件报错_Seay源代码审计系统1.0版本发布(含下载)
- 千斤顶装配图怎么画_机械制图——绘制千斤顶装配图教程.ppt
- linux打开pkg文件怎么打开,archlinux32无法打开文件 ×××.pkg.tar.zst 无法安装新包,如何解决?...
- ADS8332芯片驱动程序
- 360 无法显示网速
- php计算文字高度,用PHP GD计算文本宽度
- dnf超时空漩涡副本路线流程图_DNF超时空漩涡副本怎么过_DNF超时空漩涡副本快速达成图文攻略...
热门文章
- python爬虫抓收费图片_简单的Python抓taobao图片爬虫
- Matlab 利用M文件产生模糊控制器
- angular 组件通信
- android瓦片地图下载,Andorid 如何加载 瓦片地图
- 以下哪些是oracle预定义角色,Oracle中预定义角色有哪些?
- 百度搜索结果 转换_如何让图片出现在百度搜索结果里出现?
- 区域内点的个数_JAVA
- 顺序表应用3:元素位置互换之移位算法
- leetcode -day19 Convert Sorted List to Binary Search Tree
- 【数据结构与算法】3.二叉搜索树(BST)、c++代码