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 相关文章推荐
在Windows中安装Apache2和PHP4的权威指南
Oct 09 PHP
PHP实现域名whois查询的代码(数据源万网、新网)
Feb 22 PHP
PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
Jul 01 PHP
ThinkPHP写第一个模块应用
Feb 20 PHP
基于php在各种web服务器的运行模式详解
Jun 03 PHP
php用正则表达式匹配URL的简单方法
Nov 12 PHP
PHP使用get_headers函数判断远程文件是否存在的方法
Nov 28 PHP
[原创]php token使用与验证示例【测试可用】
Aug 30 PHP
php语言注释,单行注释和多行注释
Jan 21 PHP
PHP获取MySQL执行sql语句的查询时间方法
Aug 21 PHP
TP5框架简单登录功能实现方法示例
Oct 31 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
Apr 06 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 删除记录实现代码
2009/03/12 PHP
搭建基于Docker的PHP开发环境的详细教程
2015/07/01 PHP
非常经典的PHP文件上传类分享
2016/05/15 PHP
PHP 配置后台登录以及模板引入
2017/01/24 PHP
thinkPHP框架中layer.js的封装与使用方法示例
2019/01/18 PHP
PHP PDOStatement::getAttribute讲解
2019/02/01 PHP
JavaScript 函数调用规则
2009/09/14 Javascript
ExtJS GridPanel 根据条件改变字体颜色
2010/03/08 Javascript
document.createElement()用法及注意事项(ff下不兼容)
2013/03/13 Javascript
Javascript基础知识(一)核心基础语法与事件模型
2014/09/29 Javascript
javascript中函数作为参数调用的方法
2015/02/09 Javascript
javascript设计模式之模块模式学习笔记
2017/02/15 Javascript
利用Node.js对文件进行重命名
2017/03/12 Javascript
vue中引用swiper轮播插件的教程详解
2018/08/16 Javascript
详解Vue 动态组件与全局事件绑定总结
2018/11/11 Javascript
vue 中 命名视图的用法实例详解
2019/08/14 Javascript
layui 上传文件_批量导入数据UI的方法
2019/09/23 Javascript
vue实现广告栏上下滚动效果
2020/11/26 Vue.js
JavaScript canvas实现跟随鼠标移动小球
2021/02/09 Javascript
[01:05:00]2018国际邀请赛 表演赛 Pain vs OpenAI
2018/08/24 DOTA
Python实现分割文件及合并文件的方法
2015/07/10 Python
python列表list保留顺序去重的实例
2018/12/14 Python
python科学计算之scipy——optimize用法
2019/11/25 Python
python爬虫实现获取下一页代码
2020/03/13 Python
Softmax函数原理及Python实现过程解析
2020/05/22 Python
利用css3制作3D样式按钮实现代码
2013/03/18 HTML / CSS
使用CSS3制作一个简单的Chrome模拟器
2015/07/15 HTML / CSS
Gibson London官网:以地道的英国男装而著称
2019/12/06 全球购物
如何现实servlet的单线程模式
2014/08/05 面试题
大学校园毕业自我鉴定
2014/01/15 职场文书
《李广射虎》教学反思
2014/04/27 职场文书
电子商务专业毕业生自荐书
2014/06/22 职场文书
2015年教师新年寄语
2014/12/08 职场文书
慰问信的写作格式及范文!
2019/06/24 职场文书
python函数指定默认值的实例讲解
2021/03/29 Python
Spring Data JPA框架自定义Repository接口
2022/04/28 Java/Android