日期:2011-09-13  浏览次数:20593 次

 

上一篇文章我提了一个问题,怎么实现自动载入一个类呢?

实际上PHP已经有相应的机制可以实现这个功能了,这个机制就是autoload,它会在试图使用尚未被定义的类时自动调用。

现在我们可以在Route.php中的开头定义autoload函数(当然,这样是不规范的,但是为了简单,先这么做)。

我们现在的自动导入需要导入两类文件,一类是框架类文件,另外一类是用户应用模块的类文件,为了简化代码,可以假设框架的所有文件都存放在/Library/Test目录下面,用户类文件都存放在/UserApps/Modules目录下面,并且只会在Controllers,Models,Helpers这三个目录下面,并且这几个目录下面没有子目录。

对于这个自动导入的函数,它需要首先尝试导入框架类文件,如果该文件不存在,说明是用户类文件,然后再尝试导入用户类文件,如果是,那么include它。

注意:

由于要频繁使用UserApps/Modules这个目录,所以我定义了一个MODULES_PATH这个常量;

01 function __autoload($className) {
02     $frameworkFileName = FRAMEWORK_PATH . '/' . $className . '.php';
03     if(is_file($frameworkFileName)) {
04         include $frameworkFileName;
05     } else {
06         //用户类文件
07         $controllerFileName = MODULES_PATH . '/Controllers/' . $className .&nb