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即可。