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