PHPCMS源码分析(四)

if(pc_base::load_config('system','gzip') && function_exists('ob_gzhandler')) {
    ob_start('ob_gzhandler');
} else {
    ob_start();
}

 

启用输出缓存。

到此为止,base.php已经加载完毕,接下来我们看下pc_base::creat_app();到底干了些什么活。

/**
 * 初始化应用程序
 */
public static function creat_app() {
    return self::load_sys_class('application');
}
/**
 * 加载系统类方法
 * @param string $classname 类名
 * @param string $path 扩展地址
 * @param intger $initialize 是否初始化
 */
public static function load_sys_class($classname, $path = '', $initialize = 1) {
        return self::_load_class($classname, $path, $initialize);
}
/**
 * 加载类文件函数
 * @param string $classname 类名
 * @param string $path 扩展地址
 * @param intger $initialize 是否初始化
 */
private static function _load_class($classname, $path = '', $initialize = 1) {
    static $classes = array();
    if (empty($path)) $path = 'libs'.DIRECTORY_SEPARATOR.'classes';
        $key = md5($path.$classname);
    if (isset($classes[$key])) {
        if (!empty($classes[$key])) {
            return $classes[$key];
        } else {
            return true;
        }
    }
    if (file_exists(PC_PATH.$path.DIRECTORY_SEPARATOR.$classname.'.class.php')) {
        include PC_PATH.$path.DIRECTORY_SEPARATOR.$classname.'.class.php';
        $name = $classname;
        if ($my_path = self::my_path(PC_PATH.$path.DIRECTORY_SEPARATOR.$classname.'.class.php')) {
            include $my_path;
            $name = 'MY_'.$classname;
        }
        if ($initialize) {
            $classes[$key] = new $name;
        } else {
            $classes[$key] = true;
        }
        return $classes[$key];
    } else {
        return false;
    }
}

 

以上代码为base.php文件中creat_app()这个方法的调用过程。在_load_class()这个方法中,调用了application.class.php,并初始化了application这个类。这里需要注意的是application.class.php中的类的命名比如和文件名同名。

posted @ 2014-01-29 22:22  张大千  阅读(557)  评论(0编辑  收藏  举报