Zend Framework1 Zend_Loader 动态加载文件或类

1 动态加载文件和类

Zend_Loader类可以帮助你动态加载文件或者类。

Zend_Loader最适合加载的文件名是变量的情况,比如要加载的文件名来自或取决于用户的输入,如果你加载的文件名是常量,则使用Zend_Loader没有任何优势。


1.1 加载文件

Zend_Loader::loadFile($filename, $dirs=null, $once=false);

静态方法Zend_Loader::loadFile()加载PHP文件,被加载的文件可包含任何php代码,实则是将php的include函数封装成了一个方法,当包含文件失败时,会抛出一个Zend_Exception。

<?php
Zend_Loader::loadFile($filename, $dirs=null, $once=false);

$filename 指定需要加载的文件。

$dirs 指定文件所在的目录

$once 布尔类型 如果是true则使用include_once 否则使用include


1.2 加载类

Zend_Loader::loadClass($class, $dirs = null)

该方法用来加载一个PHP类文件,该文件名格式为"$className.php",也就是说,加载的文件名称必须与类名相同。

loadClass会检查文件中的类是否存在。

<?php
Zend_Loader::loadClass('Container_Tree',
    array(
        '/home/production/mylib',
        '/home/production/myapp'
    )
);

类名将会根据下划线作为目录分割线,对应到相应目录下的PHP文件,并加上".php",比如Container_Tree将会指向Container/Tree.php

如果文件不存在或者文件中的类不存在,则loadClass()会抛出一个Zend_Exception。

1.3 判定某个文件是否存在并可读

Zend_Loader::isReadable($pathname)

判定一个文件是否存在并可读,返回true或false


1.4 使用Autoloader

Zend_Loader::registerAutoload($class = 'Zend_Loader', $enable = true);

自动尝试加载类文件,不用每次调用loadFile或loadClass方法了。

这个方法是为了不用调用在每次使用一个类的时候,去包含类文件,这样,在包含一个未被包含的类的时候,会自动使用Zend_Loader这个类去尝试包含$class . ".php"这个文件。


可以从Zend_Loader继承出一个类,重写Zend_Loader::autoload()方法,来实现自己规则的自动加载。

MyLoader.php

<?php
require_once 'Zend/Loader.php';
class MyLoader 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("MyLoader");

然后需要自动加载类文件的php代码里 include 一下myloader.php即可。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值