C() 是 ThinkPHP 核心配置操作函數,支援設置、讀取、批量賦值、二級配置、永久緩存等多種用法。掌握其完整語法,能靈活控制應用行為、動態調整參數、實現配置熱更新。
C('參數名', '參數值'); // 設置單個
C('參數名'); // 獲取單個
C(['參數1'=>'值1', ...]); // 批量設置
C(); // 獲取所有
C('', '緩存標識'); // 讀取永久緩存
C($config, '緩存標識'); // 批量設置並永久緩存
C('DB_NAME', 'thinkphp'); // 推薦大寫
C('db_name', 'thinkphp'); // 不區分大小寫,效果相同
C('USER.USER_ID', 8); // 二級配置:USER 下的 USER_ID
特點:運行時動態修改,覆蓋配置文件定義,僅影響當前請求生命周期。
$userId = C('USER_ID'); // 返回值或 null(未定義)
$userId = C('USER.USER_ID'); // 獲取二級配置
$allConfig = C(); // 返回所有配置數組
$config = [
'USER_ID' => 1,
'USER_TYPE' => 1,
'APP_DEBUG' => true
];
C($config); // 等同於逐個 C('KEY', 'VALUE')
將配置寫入緩存文件(或 Redis、Memcached 等配置的緩存驅動),跨請求持久化。
// 寫入緩存
$config = ['API_KEY' => 'abc123', 'API_SECRET' => 'xyz789'];
C($config, 'payment_config'); // 緩存標識 'payment_config'
// 讀取緩存(合併到當前配置)
$cached = C('', 'payment_config'); // 返回陣列或 null
流程:批量設置 → 連同現有配置序列化 → 存入緩存 → 後續請求讀取緩存 → 與當前配置合並(緩存優先)。
ThinkPHP 配置文件採用 PHP 返回數組格式:
// Application/Common/Conf/config.php
return [
'DB_TYPE' => 'mysql',
'DB_HOST' => '127.0.0.1',
'DB_NAME' => 'thinkphp',
'DB_USER' => 'root',
'DB_PWD' => '',
'DB_PORT' => 3306,
'DB_PREFIX' => 'think_',
'APP_DEBUG' => true,
'URL_MODEL' => 2,
// 自定義業務配置
'PAYMENT' => [
'ALIPAY_APP_ID' => '2023001',
'WX_MCH_ID' => '150000'
]
];
$_SERVER['HTTP_HOST'] 動態 C('DB_HOST', ...)C($data, 'site_config') 持久化C('MODULE.ACTION.PARAM', $val) 避免衝突C('ALIPAY_CONFIG', [...]) 集中管理C('db_name') vs C('DB_NAME') 混用C('A.B.C') 可讀性差,建議扁平化 C('A_B_C')Runtime/Cache/ 目錄function C($name=null, $value=null) {
static $_config = [];
// 獲取所有
if (empty($name)) return $_config;
// 讀取緩存
if (is_string($name) && $value === null && strpos($name, '.') === false && $name !== '') {
return isset($_config[$name]) ? $_config[$name] : null;
}
// 批量設置/緩存
if (is_array($name)) {
$_config = array_merge($_config, array_change_key_case($name, CASE_UPPER));
if ($value) { // 永久緩存
$cache = S($value, $_config); // S() 緩存函數
}
return;
}
// 二級配置解析
if (strpos($name, '.')) {
list($name1, $name2) = explode('.', $name);
$name1 = strtoupper($name1);
$name2 = strtoupper($name2);
if ($value !== null) {
$_config[$name1][$name2] = $value;
return;
}
return isset($_config[$name1][$name2]) ? $_config[$name1][$name2] : null;
}
// 單個設置/獲取
$name = strtoupper($name);
if ($value !== null) {
$_config[$name] = $value;
return;
}
return isset($_config[$name]) ? $_config[$name] : null;
}
C() 以靈活的函數重載設計,用極簡 API 覆蓋了配置管理全生命周期。善用它,能大幅減少硬編碼、提升應用可配置性。