index php中引入了phpcms框架的入口文件,下面我们看下这个入口文件
phpcms base phpdefine( IN_PHPCMS , t
index.php中引入了phpcms框架的入口文件,下面我们看下这个入口文件
/phpcms/base.php
define('IN_PHPCMS', true);//防止恶意调用 //PHPCMS框架路径 define('PC_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR); //重新定义网站根目录 if(!defined('PHPCMS_PATH')) define('PHPCMS_PATH', PC_PATH.'..'.DIRECTORY_SEPARATOR); //缓存文件夹地址 define('CACHE_PATH', PHPCMS_PATH.'caches'.DIRECTORY_SEPARATOR); //主机协议 define('SITE_PROTOCOL', isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443' ? 'https://' : 'http://'); //当前访问的主机名 define('SITE_URL', (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '')); //来源 define('HTTP_REFERER', isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''); //系统开始时间 define('SYS_START_TIME', microtime());
以上这段代码主要定义了一些常量,不做过多解释。下面我们来看看公共函数库的加载。
//加载公用函数库 pc_base::load_sys_func('global'); pc_base::load_sys_func('extention'); pc_base::auto_load_func();
利用pc_base中的静态方法来调用函数库。具体的实现方法如下:
/** * 加载系统的函数库 * @param string $func 函数库名 */ public static function load_sys_func($func) { return self::_load_func($func); } /** * 加载函数库 * @param string $func 函数库名 * @param string $path 地址 */ private static function _load_func($func, $path = '') { static $funcs = array(); if (empty($path)) $path = 'libs'.DIRECTORY_SEPARATOR.'functions'; $path .= DIRECTORY_SEPARATOR.$func.'.func.php'; $key = md5($path); if (isset($funcs[$key])) return true; if (file_exists(PC_PATH.$path)) { include PC_PATH.$path; } else { $funcs[$key] = false; return false; } $funcs[$key] = true; return true; }
以上函数的调用方法值得学习的地方是函数的加载方式。把函数加载进来之后放入到静态变量$funcs这个数组中,在下次调用时就不需要到文件中重新调用,而是直接在内存中调用就可以了。
/** * 自动加载autoload目录下函数库 * @param string $func 函数库名 */ public static function auto_load_func($path='') { return self::_auto_load_func($path); } /** * 加载函数库 * @param string $func 函数库名 * @param string $path 地址 */ private static function _auto_load_func($path = '') { if (empty($path)) $path = 'libs'.DIRECTORY_SEPARATOR.'functions'.DIRECTORY_SEPARATOR.'autoload'; $path .= DIRECTORY_SEPARATOR.'*.func.php'; $auto_funcs = glob(PC_PATH.DIRECTORY_SEPARATOR.$path); if(!empty($auto_funcs) && is_array($auto_funcs)) { foreach($auto_funcs as $func_path) { include $func_path; } } }
以上代码是需要自动加载的函数库的加载方法,可以学习的是利用glob()函数加载'lib/functions/autoload/'目录下的所有函数文件。