Zend Framework使用Zend_Loader组件动态加载文件和类用法详解


Posted in PHP onDecember 09, 2016

本文实例讲述了Zend Framework使用Zend_Loader组件动态加载文件和类的方法。分享给大家供大家参考,具体如下:

加载文件

Zend_Loader组件可以实现对文件的加载功能,还可以判断文件是否可读。

这两个功能分别由Zend_loader::loadFile()方法与Zend_loader::isReadable()方法来实现。

动态加载是可以将变量所指代的文件进行加载的过程。当需要加载的文件为用户输入或是某个方法的参数时,通过传统的加载方法会很难对文件进行加载。

通过动态加载则可以实现这一过程。

示例:

首先建立被加载的文档temp.php,该文档只实现一个简单的输出功能,代码如下。

<?php
echo "Hello World!";
?>

主程序:

<?php
require_once("Zend/Loader.php");
$filename = 'temp.php';
Zend_Loader::loadFile($filename);

执行结果:

Hello World!

说明文件已经被成功的加载进来了。

判断文件属性

语法格式:

Zend_Loader::isReadable($filename)

如果文件可读,程序将返回True

该方法是由PHP函数is_readable()封装而成的,但二者还是存在不同之处。is_readable()方法

不会自动查找include_path目录下的文件,而Zend::isReadable()方法则可以。

示例:

<?php
require_once("Zend/Loader.php");
$filename = 'temp.php';
if(Zend_Loader::isReadable($filename)){
  echo "文件".$filename."是可读的!";
}else{
  echo "文件".$filename."不可读!";
}
echo "<p/>";
if(is_readable('Zend/Date.php')){
  echo "include_path下文件可读";
}else{
  echo "include_path下文件不可读";
}
echo "<p/>";
if(Zend_Loader::isReadable('Zend/Date.php')){
  echo "include_path下文件可读";
}else{
  echo "include_path下文件不可读";
}

结果:

文件temp.php是可读的!
include_path下文件不可读
include_path下文件可读

这个例子说明,is_readable()方法不可以判断include_path文件是否可读,而Zend_Loader::isReadable()方法可以判断。include_path文件,指的是php.ini中配置引入的文件。

不仅如此,Zend_Loader还可以进行类的加载。这将在下面进行讲解。

动态加载类

Zend_Loader不仅可以动态加载文件,通过其loadClass()方法还可以实现。

语法:

Zend_Loader::loadClass($class,$dirs)

其中,class为指定的类名,class为指定的类名,dirs为包含类的文件所在的路径及文件名。类名将会根据下划线对应到相应目录下的

PHP文件,如Zend_Controller_Action会指向Zend/Controller/Action.php。

如果参数$dirs是一个字符串或数组,则该方法会根据顺序查找相应目录,并加装第一个匹配的文件。如果文件不存在,该方法还会到include_path指定的目录下进行查找。

示例:

<?php
require_once("Zend/Loader.php");
Zend_Loader::loadClass('Zend_Date');
$date = new Zend_Date();
echo $date;

结果:

2013-3-18 下午05:30:16

说明,这段代码直接到include_path中加载需要的类。然后实例化,输出即可。

希望本文所述对大家基于Zend Framework框架的PHP程序设计有所帮助。

PHP 相关文章推荐
文件上传类
Oct 09 PHP
PHP中最容易忘记的一些知识点总结
Apr 28 PHP
dedecms中使用php语句指南
Nov 13 PHP
php+Mysqli利用事务处理转账问题实例
Feb 11 PHP
PHP学习笔记(二):变量详解
Apr 17 PHP
PHP中的类型约束介绍
May 11 PHP
8个必备的PHP功能开发
Oct 02 PHP
Laravel实现自定义错误输出内容的方法
Oct 10 PHP
php的PDO事务处理机制实例分析
Feb 16 PHP
php递归函数怎么用才有效
Feb 24 PHP
PHP Include文件实例讲解
Feb 15 PHP
PHP实现考试倒计时功能代码
Apr 16 PHP
PHP 根据key 给二维数组分组
Dec 09 #PHP
Zend Framework入门教程之Zend_Registry组件用法详解
Dec 09 #PHP
Zend Framework入门教程之Zend_Config组件用法详解
Dec 09 #PHP
Zend Framework过滤器Zend_Filter用法详解
Dec 09 #PHP
Zend Framework实现自定义过滤器的方法
Dec 09 #PHP
Zend Framework校验器Zend_Validate用法详解
Dec 09 #PHP
浅谈PHP中try{}catch{}的使用方法
Dec 09 #PHP
You might like
php后台程序与Javascript的两种交互方式
2009/10/25 PHP
PHP ? EasyUI DataGrid 资料取的方式介绍
2012/11/07 PHP
php smarty truncate UTF8乱码问题解决办法
2014/06/13 PHP
深入理解PHP 数组之count 函数
2016/06/13 PHP
CI框架常用函数封装实例
2016/11/21 PHP
JavaScript 验证浏览器是否支持javascript的方法小结
2009/05/17 Javascript
JQuery UI的拖拽功能实现方法小结
2012/03/14 Javascript
JavaScript实现MIPS乘法模拟的方法
2015/04/17 Javascript
JS中关于事件处理函数名后面是否带括号的问题
2016/11/16 Javascript
JavaScript实现邮箱地址自动匹配功能代码
2016/11/28 Javascript
JavaScript省市级联下拉菜单实例
2017/02/14 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
2017/06/04 Javascript
Node.js  REPL (交互式解释器)实例详解
2017/08/06 Javascript
node文件批量重命名的方法示例
2017/10/23 Javascript
Vue filter介绍及详细使用
2018/04/04 Javascript
浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
2018/12/20 Javascript
jquery插件懒加载的示例
2020/10/24 jQuery
NestJs使用Mongoose对MongoDB操作的方法
2021/02/22 Javascript
[01:07:11]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python中__call__用法实例
2014/08/29 Python
基于python中staticmethod和classmethod的区别(详解)
2017/10/24 Python
Tensorflow使用tfrecord输入数据格式
2018/06/19 Python
对numpy.append()里的axis的用法详解
2018/06/28 Python
Python中logging实例讲解
2019/01/17 Python
python如何写出表白程序
2020/06/01 Python
Python计算矩阵的和积的实例详解
2020/09/10 Python
python3从网络摄像机解析mjpeg http流的示例
2020/11/13 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
2020/11/18 Python
美丽的珠宝配饰:SmallThings
2019/09/04 全球购物
数控专业大学生的自我鉴定
2013/11/13 职场文书
生产车间主管岗位职责
2013/12/28 职场文书
给老师的道歉信
2014/01/11 职场文书
工商干部先进事迹
2014/05/14 职场文书
2014年最新大专生职业生涯规划书范文
2014/09/13 职场文书
观后感的写法
2015/06/19 职场文书
浅谈如何提高PHP代码质量之单元测试
2021/05/28 PHP