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 相关文章推荐
PHP中PDO基础教程 入门级
Sep 04 PHP
深入php 正则表达式的学习探讨
Jun 06 PHP
PHP积分兑换接口实例
Feb 09 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
Feb 26 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
Jun 30 PHP
Ubuntu上安装yaf扩展的方法
Jan 29 PHP
php框架CodeIgniter主从数据库配置方法分析
May 25 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
Jun 04 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
Oct 16 PHP
PHP根据key删除数组中指定的元素
Feb 28 PHP
php简单检测404页面的方法示例
Aug 23 PHP
php开发最强大的IDE编辑的phpstorm 2020.2配置Xdebug调试的详细教程
Aug 17 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
短波问题解答
2021/02/28 无线电
PHP在引号前面添加反斜杠(PHP去除反斜杠)
2013/09/28 PHP
PHP中Restful api 错误提示返回值实现思路
2016/04/12 PHP
PHP下用Swoole实现Actor并发模型的方法
2019/06/12 PHP
nginx 设置多个站跨域
2021/03/09 Servers
JS 创建对象(常见的几种方法)
2008/11/03 Javascript
基于jquery实现的服务器验证控件的启用和禁用代码
2010/04/27 Javascript
异步加载script的代码
2011/01/12 Javascript
上传的js验证(图片/文件的扩展名)
2013/04/25 Javascript
基于jquery的禁用右键、文本选择功能、复制按键的实现代码
2013/08/27 Javascript
jquery使用jquery.zclip插件复制对象的实例教程
2013/12/04 Javascript
调试JavaScript中正则表达式中遇到的问题
2015/01/27 Javascript
浅谈Jquery中Ajax异步请求中的async参数的作用
2016/06/06 Javascript
浅谈javascript中的constructor
2016/06/08 Javascript
javascript之with的使用(阿里云、淘宝使用代码分析)
2016/10/11 Javascript
localStorage实现便签小程序
2016/11/28 Javascript
微信小程序 setData的使用方法详解
2017/04/20 Javascript
js轮播图透明度切换(带上下页和底部圆点切换)
2017/04/27 Javascript
详解Vue如何支持JSX语法
2017/11/10 Javascript
基于JS实现前端压缩上传图片的实例代码
2019/05/14 Javascript
基于jQuery的时间戳与日期间的转化
2019/06/21 jQuery
微信小程序批量上传图片到七牛(推荐)
2019/12/19 Javascript
[01:41]DOTA2 2015国际邀请赛中国区预选赛第三日战报
2015/05/28 DOTA
python使用smtplib模块通过gmail实现邮件发送的方法
2015/05/08 Python
django之session与分页(实例讲解)
2017/11/13 Python
python 读取txt中每行数据,并且保存到excel中的实例
2018/04/29 Python
python与mysql数据库交互的实现
2020/01/06 Python
Python绘制数码晶体管日期
2021/02/19 Python
教师实习自我鉴定
2013/12/11 职场文书
2014年煤矿安全工作总结
2014/12/04 职场文书
谢师宴邀请函
2015/02/02 职场文书
投标邀请书范本
2015/02/02 职场文书
2015年采购部工作总结
2015/04/23 职场文书
领导干部学习心得体会
2016/01/23 职场文书
Nest.js参数校验和自定义返回数据格式详解
2021/03/29 Javascript
JAVA长虹键法之建造者Builder模式实现
2022/04/10 Java/Android