標籤:源碼閱讀 thinkphp源碼閱讀 thinkphp配置
ThinkPHP的配置非常靈活,可自訂載入.大概看了一下,一共有這幾個地方會載入設定檔,方便以後的讀取
/** * 擷取和設定配置參數 支援批量定義 * * @param string|array $name * 組態變數 * @param mixed $value * 配置值 * @return mixed */function C($name = null, $value = null) { static $_config = array (); // 無參數時擷取所有 if (empty ( $name )) { if (! empty ( $value ) && $array = S ( ‘c_‘ . $value )) { $_config = array_merge ( $_config, array_change_key_case ( $array ) ); } return $_config; } // 優先執行設定擷取或賦值 if (is_string ( $name )) { if (! strpos ( $name, ‘.‘ )) { $name = strtolower ( $name ); if (is_null ( $value )) return isset ( $_config [$name] ) ? $_config [$name] : null; $_config [$name] = $value; return; } // 二維數組設定和擷取支援 $name = explode ( ‘.‘, $name ); $name [0] = strtolower ( $name [0] ); if (is_null ( $value )) return isset ( $_config [$name [0]] [$name [1]] ) ? $_config [$name [0]] [$name [1]] : null; $_config [$name [0]] [$name [1]] = $value; return; } // 大量設定 if (is_array ( $name )) { $_config = array_merge ( $_config, array_change_key_case ( $name ) ); if (! empty ( $value )) { // 儲存配置值 S ( ‘c_‘ . $value, $_config ); } return; } return null; // 避免非法參數}
C()函數在啟動並執行時候,就會把設定檔中的配置都載入到C()函數中,以後只要需要的提取出來即可,而且可以臨時增加自己的C函數
1.Think.class.php buildApp方法,載入公用設定檔Conf/convention.php,緩衝到C方法裡
// 載入核心慣例設定檔Think.class.php第60行 C(include THINK_PATH.‘Conf/convention.php‘); if(isset($mode[‘config‘])) {// 載入模式設定檔 C( is_array($mode[‘config‘])?$mode[‘config‘]:include $mode[‘config‘] ); }
2.附加元件目的config.php檔案
// 附加元件目設定檔 Think.class.php第66行 if(is_file(CONF_PATH.‘config.php‘)) C(include CONF_PATH.‘config.php‘);
3.載入系統標籤設定檔ThinkPHP/Conf/tags.php檔案,C(‘extends‘);
// 載入模式系統行為定義 if(C(‘APP_TAGS_ON‘)) { if(isset($mode[‘extends‘])) { C(‘extends‘,is_array($mode[‘extends‘])?$mode[‘extends‘]:include $mode[‘extends‘]); }else{ // 預設載入系統行為擴充定義 C(‘extends‘, include THINK_PATH.‘Conf/tags.php‘); } }
4.載入應用標籤配置APP/Conf/tags.php C(‘extends‘);
// 載入應用行為定義 if(isset($mode[‘tags‘])) { C(‘tags‘, is_array($mode[‘tags‘])?$mode[‘tags‘]:include $mode[‘tags‘]); }elseif(is_file(CONF_PATH.‘tags.php‘)){ // 預設附加元件目配置目錄的tags檔案定義 C(‘tags‘, include CONF_PATH.‘tags.php‘); }
5.如果是偵錯模式,則載入ThinkPHP/Conf/debug.php,和應用狀態調試檔案
if(APP_DEBUG) { // 偵錯模式載入系統預設的設定檔 C(include THINK_PATH.‘Conf/debug.php‘); // 讀取偵錯模式的應用狀態 $status = C(‘APP_STATUS‘); // 載入對應的項目設定檔 if(is_file(CONF_PATH.$status.‘.php‘)) // 允許項目增加開發模式配置定義 C(include CONF_PATH.$status.‘.php‘); }else{ // 部署模式下面產生編譯檔案 build_runtime_cache($compile); }
6.App:init 調用function.php中得load_ext_file函數,載入自訂設定檔
在function.php中load_ext_file()函數中
/** * 載入動態擴充檔案 * @return void */function load_ext_file() { // 載入自訂外部檔案 if(C(‘LOAD_EXT_FILE‘)) { $files = explode(‘,‘,C(‘LOAD_EXT_FILE‘)); foreach ($files as $file){ $file = COMMON_PATH.$file.‘.php‘; if(is_file($file)) include $file; } } // 載入自訂的動態設定檔 if(C(‘LOAD_EXT_CONFIG‘)) { $configs = C(‘LOAD_EXT_CONFIG‘); if(is_string($configs)) $configs = explode(‘,‘,$configs); foreach ($configs as $key=>$config){ $file = CONF_PATH.$config.‘.php‘; if(is_file($file)) { is_numeric($key)?C(include $file):C($key,include $file); } } }}
本文出自 “尛雷” 部落格,請務必保留此出處http://a3147972.blog.51cto.com/2366547/1413056