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中的类的命名比如和文件名同名。