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即可。
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。
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
$filename 指定需要加载的文件。
$dirs 指定文件所在的目录
$once 布尔类型 如果是true则使用include_once 否则使用include
1.2 加载类
Zend_Loader::loadClass($class, $dirs = null)
该方法用来加载一个PHP类文件,该文件名格式为"$className.php",也就是说,加载的文件名称必须与类名相同。
loadClass会检查文件中的类是否存在。
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
类名将会根据下划线作为目录分割线,对应到相应目录下的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
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
然后需要自动加载类文件的php代码里 include 一下myloader.php即可。