1. 程式人生 > >CI原始碼分析(一)—config配置檔案模組

CI原始碼分析(一)—config配置檔案模組

(一) 使用方式 (a) 系統級配置      語言、字元編碼、session、cookie等配置項
  • 檔案位置: application/config/config.php
  • 載入方式: 自動載入
  • 呼叫方式: $this->config->item(‘config_item_key');
(b) 業務級別配置      實際業務中用到的配置項,或者叫做常量,比如1<->男  2<->女  3<->未知等資料。強烈建議把業務級別的配置項與系統配置項分開。CI支援多級目錄的配置檔案載入,所以可以在application/config資料夾下建立專門的業務配置資料夾, 例如constants.
  • 檔案位置: application/config/path/to/config_file.php
  • 載入方式: 手動載入(或者在autoload.php中配置自動載入).$this->config->load(‘path/to/config_file’, true).第二個引數,會把不同檔案的配置分組, 強烈建議加上.
  • 呼叫方式:  $this->config->item(‘config_item_key’, 'path/to/config_file’); 第二個引數是上面載入的時候指定的分組
(c) 動態修改配置      CI所有的配置項都是一次載入,同時也支援動態修改配置項。但是暫時不支援指定分組的配置項修改,我自己實現了, 地址:https://github.com/wkupaochuan/analysis-about-ci-frame.git
, 路徑是application/core/MY_Config.php
  • 單個修改: $this->config->set_item(‘config_item_key’, $value);
  • 批量修改: $this->config->_assign_to_config($array); 
(二) 實現方式 (a) Common.php      這個檔案中都是全域性可以呼叫的方法,跟config相關的是get_config方法和config_item函式, 主要用在system的框架檔案中
  • get_config: require檔案application/config/config.php檔案,儲存在區域性靜態變數$_config中,所以也是一次載入。這裡需要注意的是因為載入的是必須的配置檔案config.php,所以使用了require,來進行錯誤處理
  • config_item: 獲取載入過的配置項
(b) system/core/config.php 類      這個類例項化後作為超類CI的一個屬性$this->config, 主要方法__construct()、load()、item(), 配置檔案載入後賦值給config物件的屬性$config, 因為超類CI是全域性的,所以這裡的配置檔案也是一次載入
  • __construct: 預設先載入application/config/config.php檔案,呼叫Common.php檔案中的函式get_config
  • load: 根據傳入的引數$file,分別在config/ENVIRONMENT/$file和config/$file中尋找目標配置檔案,優先載入當前ENVIRONMENT下的配置檔案。找到配置檔案後會把對應的配置陣列merge到已經載入的配置中。這裡要十分注意,一旦兩個不同的配置檔案中存在相同的配置key,又沒有指定配置項分組,前面載入的配置項就會被覆蓋,所以強烈建議,每次load配置檔案都指定第二個引數use_section
  • config_item: 返回已經載入的配置項, 沒找到(確實沒有的配置項和未載入的配置項)則返回false。
(三)優缺點 (a) 缺點
  • 每次使用$this->config->item(),獲取配置項時,有可能因為沒有load過對應的配置檔案,所以建議load then item, 或者全部配置檔案都配置上autoload。這裡我自己實現了一個my_item方法my_item($file, $item), 不需要先載入後呼叫。方法內部會先呼叫,沒有結果會嘗試載入一次,然後再次呼叫並返回結果,一定程度上簡化了程式碼, 而且不需要配置autoload。路徑是application/core/MY_Config.php。
(b) 優點
  • 支援目錄分級, 方便清晰的組織、管理業務配置檔案