溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ThinkPHP源碼閱讀2-----C函數配置文件詳解

發布時間:2020-04-09 09:50:05 來源:網絡 閱讀:1359 作者:AndyMac 欄目:web開發

      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);
            }
        }
    }
}

     


ThinkPHP源碼閱讀2-----C函數配置文件詳解

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女