免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1975 | 回复: 0
打印 上一主题 下一主题

Zend Framework Zend_loader类 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-22 14:44 |只看该作者 |倒序浏览

                Zend_Loader类可以帮助你动态加载文件。
Zend_Loader vs. require_once()
Zend_Loader
最适合于加载的文件名是变量的情况(例如你要加载的文件的名称来自于用户的输入或者某个方法的参数)。如果你加载的文件名或类名是一个常量(即确定的文件,如/lib/test.php),则使用
Zend_Loader 并不比传统的PHP函数
require_once()
有什么优势。 
Zend_loader类的方法包括:
1、文件加载
Zend_Loader::loadFile($filename, $dirs=null, $once=false);
注意:
$filename中不需要指定任何路径,只需要指定文件名即可;ZF会对文件作安全性检查。 $filename
只能由字母,数字,连接符-,下划线_及英文句号.组成(半角)。$dirs参数则不限,可以使用中文等。
$dirs 参数用来指定文件所在目录,可以是一个字符串或者数组。如果为 NULL,则程序将会到系统的 include_path
下寻找文件是否存在(include_path可在php.ini中设置--Haohappy注),如果是字符串或数组,则会到指定的目录下去找,然后才是 include_path。 
$once 参数为布尔类型,如果为 TRUE,Zend_Loader::loadFile() 使用 PHP 函数
include_once()
加载文件,否则就是 PHP 函数
include()
。(本参数只能是true或false,两者区别就和include()和include_once()的区别一样。)
2、加载类
Zend_Loader::loadClass($class, $dirs)
静态方法Zend_Loader::loadClass($class, $dirs)用来加载一个 PHP
类文件,该文件名格式为“$className.php”(也就是说加载的文件名称必须和文件中的类同名)。loadClass()会检查文件中的类是否存在。例如:
Zend_Loader::loadClass('Container_Tree',
                         array(
                                 '/home/production/mylib',
                                 '/home/production/myapp'
                         )
 ); 
 类名将会根据下划线(作为目录分隔线)对应到相应目录下的PHP文件,并加上'.php',比如Container_Tree会指向Container/Tree.php。
如果$dirs是一个字符串或数组, Zend_Loader::loadClass()会根据顺序查找相应目录,并加载第一个匹配的文件。如果文件不存在,则会查找
inculde_path 指定的目录。
如果文件不存在或者文件中相应的类不存在,那么 Zend_Loader::loadClass()
就会抛出一个 Zend_Exception 异常。
Zend_Loader::loadFile()
用来加载文件,所以类名中只能包含字母数字、连接符('-')、下划线('_')和句点('.')。
3、判定某个文件是否可读
Zend_Loader::isReadable($pathname) 
静态方法Zend_Loader::isReadable($pathname)判定某个文件是否存在并可读,可读则返回 TRUE ,否则返回 FALSE。例如:
 if (Zend_Loader::isReadable($filename)) {
         // do something with $filename
 }
$filename参数指定了要检查的文件名,包括路径信息。这个方法是将 PHP 函数
is_readable()
封装而成的,is_readable()
不会自动查找 include_path 下的文件,而 Zend::isReadable() 可以。
4、使用 Autoloader
Zend_Loader 类包括一个可以用 PHP SPL autoloader 注册的方法。Zend_Loader::autoload() 是 callback 方法。为方便起见,Zend_Loader 提供 registerAutoload()
函数注册它的 autoload() 方法。如果 spl_autoload 扩展不在你的 PHP 环境中,那么 registerAutoload() 方法将抛出 Zend_Exception。
例 注册 autoloader callback 方法范例
Zend_Loader::registerAutoload();
         
注册 Zend Framework autoload callback 后,可以不需要显式加载就可以从 Zend Framework
引用那些类。当应用一个类,autoload() 方法自动地使用 Zend_Loader::loadClass() 。
如果继承 Zend_Loader 类,可以给 registerAutoload() 一个可选的参数通过注册一个 autoload() 方法来指定类。 
例 从继承类注册 autoload callback 方法范例
因为在 PHP 中静态函数引用的语义,你必须实现 loadClass() 和 autoload(),autoload() 必须调用 self::loadClass()。如果 autoload()
方法代表它的父类调用 self::loadClass(),那么它调用在父类中的方法,而不是子类中。
class My_Loader extends Zend_Loader
{
    public static function loadClass($class, $dirs = null)
    {
        parent::loadClass($class, $dirs);
    }
    public static function autoload($class)
    {
        try {
            self::loadClass($class);
            return $class;
        } catch (Exception $e) {
            return false;
        }
    }
}
Zend_Loader::registerAutoload('My_Loader');
     
你可以删除 autoload callback,registerAutoload()
有个可选的第二个参数,缺省为 true 。如果这个参数是 false, 那么 autoload callback 从 SPL autoload 栈里 unregistered
掉而不是注册。 
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/92327/showart_1935452.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP