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 socket方式提交的post详解
Jul 19 PHP
php Static关键字实用方法
Jun 04 PHP
基于PHP开发中的安全防范知识详解
Jun 06 PHP
使用php 获取时间今天明天昨天时间戳的详解
Jun 20 PHP
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
Sep 30 PHP
Laravel 5框架学习之路由、控制器和视图简介
Apr 07 PHP
CodeIgniter与PHP5.6的兼容问题
Jul 16 PHP
深入了解PHP中的Array数组和foreach
Nov 06 PHP
CakePHP框架Session设置方法分析
Feb 23 PHP
总结PHP内存释放以及垃圾回收
Mar 29 PHP
PHP使用mongoclient简单操作mongodb数据库示例
Feb 08 PHP
Nginx+php配置文件及原理解析
Dec 09 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/03/02 无线电
PHP调用三种数据库的方法(1)
2006/10/09 PHP
php程序员应具有的7种能力小结
2014/11/27 PHP
PHP使用XMLWriter读写xml文件操作详解
2018/07/31 PHP
js switch case default 的用法示例介绍
2013/10/23 Javascript
jQuery通过ajax请求php遍历json数组到table中的代码(推荐)
2016/06/12 Javascript
Vue.js计算属性computed与watch(5)
2016/12/09 Javascript
原生node.js案例--前后台交互
2017/02/20 Javascript
微信小程序 引用其他js文件实现代码
2017/02/22 Javascript
jQuery Json数据格式排版高亮插件json-viewer.js使用方法详解
2017/06/12 jQuery
input 标签实现输入框带提示文字效果(两种方法)
2017/10/09 Javascript
利用ES6实现单例模式及其应用详解
2017/12/09 Javascript
js运算符的一些特殊用法
2018/07/29 Javascript
vue解决使用webpack打包后keep-alive不生效的方法
2018/09/01 Javascript
原生javascript自定义input[type=radio]效果示例
2019/08/27 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
2020/04/28 Javascript
Javascript查看大图功能代码实现
2020/05/07 Javascript
使用tensorflow实现AlexNet
2017/11/20 Python
Python3用tkinter和PIL实现看图工具
2018/06/21 Python
python实现关闭第三方窗口的方法
2019/06/28 Python
python实现超市商品销售管理系统
2019/10/25 Python
使用Python通过oBIX协议访问Niagara数据的示例
2020/12/04 Python
css3打造一款漂亮的卡哇伊按钮
2013/03/20 HTML / CSS
HTML5实时语音通话聊天MP3压缩传输3KB每秒
2019/08/28 HTML / CSS
HTML5 Blob 实现文件下载功能的示例代码
2019/11/29 HTML / CSS
函数只定义了一次, 调用了一次, 但编译器提示非法重定义了-什么问题?
2014/10/03 面试题
自荐信需注意事项
2014/01/25 职场文书
大学生党员自我批评
2014/02/14 职场文书
绿色城市实施方案
2014/03/19 职场文书
试用期自我鉴定范文
2014/03/20 职场文书
2015年车间安全管理工作总结
2015/05/13 职场文书
篮球赛新闻稿
2015/07/17 职场文书
情感电台广播稿
2015/08/18 职场文书
哪类餐饮行业,最适合在高校创业?
2019/08/19 职场文书
java固定大小队列的几种实现方式详解
2021/07/15 Java/Android
java设计模式--原型模式详解
2021/07/21 Java/Android