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/'目录下的所有函数文件。