首頁  >  文章  >  後端開發  >  thinkPHP中配置的讀取與C方法的解析

thinkPHP中配置的讀取與C方法的解析

不言
不言原創
2018-06-09 14:33:03994瀏覽

這篇文章主要介紹了thinkPHP中配置的讀取與C方法,結合實例形式分析了thinkPHP配置文件的功能、位置、分組及讀取方法,需要的朋友可以參考下

本文實例講述了thinkPHP中配置的讀取與C方法。分享給大家參考,如下:

1.專案公共配置

#Conf/config.php

##內容如下

<?php
/**
 *项目公共配置
 *@package
 *@author
 **/
return array(
 &#39;LOAD_EXT_CONFIG&#39;   => &#39;db,info,email,safe,upfile,cache,route,app,alipay,sms,platform,store,pay&#39;,  
 &#39;APP_AUTOLOAD_PATH&#39;  => &#39;@.ORG&#39;,
 &#39;OUTPUT_ENCODE&#39;   => true,    //页面压缩输出
 &#39;PAGE_NUM&#39;    => 15,
 /*Cookie配置*/
 &#39;COOKIE_PATH&#39;   => &#39;/&#39;,    // Cookie路径
 &#39;COOKIE_PREFIX&#39;   => &#39;&#39;,    // Cookie前缀 避免冲突
 /*定义模版标签*/
 &#39;TMPL_L_DELIM&#39;   =>&#39;{sh:&#39;,   //模板引擎普通标签开始标记
 &#39;TMPL_R_DELIM&#39;   =>&#39;}&#39;,    //模板引擎普通标签结束标记
 &#39;TMPL_CACHE_ON&#39;   => false,   //关闭模板缓存
 &#39;DEFAULT_GROUP&#39;   => &#39;Home&#39;,   //默认访问分组,设置默认入口
 &#39;APP_GROUP_LIST&#39;  => &#39;Agent,Home,System,User,Store,Wap,Mall,Opener&#39;,  // 项目分组设定,多个组之间用逗号分隔,例如&#39;Home,Admin&#39;
 &#39;PUBLIC_RESOURSE&#39;  => &#39;./Public/&#39;,
 &#39;URL_404_REDIRECT&#39;  => &#39;./Tpl/404.html&#39;,
);
?>

'LOAD_EXT_CONFIG' => 'db,info,email,safe,upfile,cache,route,app,alipay,sms,platform,store,pay' 確定載入的額外的配置,這些配置都可以透過C()方法讀取,全域有效。

2.如果啟用了模組分組,則可以在對每個分組中單獨定義配置文件,分組配置文件位於:

項目配置目錄/分組名稱/ config.php

&#39;APP_GROUP_LIST&#39; => &#39;Home,Admin&#39;, //项目分组设定
&#39;DEFAULT_GROUP&#39; => &#39;Home&#39;, //默认分组

現在定義了Home和Admin兩個分組,則我們可以定義分組設定檔如下:

Conf/Home/config.php
Conf/Admin/config.php

每個分組的設定檔僅在目前分組有效,分組配置的定義格式和專案配置是一樣的。

注意:分組名稱區分大小寫,必須和定義的分組名稱一致。

3.讀取配置

定義了設定檔之後,可以使用系統提供的C方法(如果覺得比較奇怪的話,可以藉助Config單字來幫助記憶)來讀取現有的設定

C(&#39;参数名称&#39;)//获取已经设置的参数值

#例如,C('APP_STATUS') 可以讀取到系統的偵錯模式的設定值,同樣,由於配置參數不區分大小寫,因此C('app_status')是等效的,但是建議使用大寫方式的規範。

如果APP_STATUS尚未存在設置,則傳回NULL。

C方法同樣可以用來讀取二維配置

C(&#39;USER_CONFIG.USER_TYPE&#39;)//获取用户配置中的用户类型设置

#C方法讀取全域配置,以及目前模組的配置。

參數沒有的話,將讀取全部的有效配置。

如果存在相同的配置名,前面的值將會被覆寫。

例如:

&#39;HTML_CACHE_TIME&#39; => 60, //静态缓存有效期(秒)
&#39;HTML_CACHE_TIME&#39; => 80,

最終取得的是80。

載入順序依照參數LOAD_EXT_CONFIG

&#39;LOAD_EXT_CONFIG&#39; => &#39;db,info,email,safe,upfile,cache,route,app,alipay,sms,platform,store,pay&#39;

例如info中有個參數HTML_CACHE_TIME 為60 ,其餘設定中沒有,那麼這個參數讀取出來就是60。

如果db中也有HTML_CACHE_TIME為50,那麼值還是60。因為info是後面讀取的,把db中的HTML_CACHE_TIME覆蓋掉了。

附上C方法原始碼

/**
 * 获取和设置配置参数 支持批量定义
 * @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 = cache(&#39;c_&#39;.$value)) {
   $_config = array_merge($_config, array_change_key_case($array));
  }
  return $_config;
 }
 // 优先执行设置获取或赋值
 if (is_string($name)) {
  if (!strpos($name, &#39;.&#39;)) {
   $name = strtolower($name);
   if (is_null($value))
    return isset($_config[$name]) ? $_config[$name] : null;
   $_config[$name] = $value;
   return;
  }
  // 二维数组设置和获取支持
  $name = explode(&#39;.&#39;, $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)) {// 保存配置值
   cache(&#39;c_&#39;.$value,$_config);
  }
  return;
 }
 return null; // 避免非法参数
}

#以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關推薦:

ThinkPHP的N方法的解析

以上是thinkPHP中配置的讀取與C方法的解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn