李超

cc编程笔记本。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
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即可。


posted on 2008-05-10 11:05  coderlee  阅读(1769)  评论(0编辑  收藏  举报