ThinkPHP源碼閱讀2-----C函數設定檔詳解

來源:互聯網
上載者:User

標籤:源碼閱讀   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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.