關於ThinkPHP中Common/common.php檔案常用函數的功能分析

來源:互聯網
上載者:User
這篇文章主要介紹了ThinkPHP中Common/common.php檔案常用函數功能,通過注釋的形式詳細分析了C方法、tag方法、B方法及autoload方法的功能與代碼原理,需要的朋友可以參考下

本文執行個體分析了ThinkPHP/Common/common.php檔案常用函數功能。分享給大家供大家參考,具體如下:

/** * 擷取和設定配置參數 支援批量定義 * @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('c_'.$value)) {      //array_change_key_case():將數組中的所有鍵名改為全小寫或大寫,預設會改為全小寫      $_config = array_merge($_config, array_change_key_case($array));    }    return $_config;  }  // 優先執行設定擷取或賦值,如果參數2為空白,則為擷取配置組態變數的值的情況;如果參數2不為空白,則是為組態變數設定值的情況  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)){//大量設定值    //array_change_key_case():將數組中的所有鍵名改為全小寫或大寫,預設會改為全小寫,注意:只是將鍵名改為小寫哦    $_config = array_merge($_config, array_change_key_case($name));    if(!empty($value)) {// 儲存配置值      cache('c_'.$value,$_config);    }    return;  }  return null; // 避免非法參數}

/** * 處理標籤擴充,如: 項目開始標籤的調用,tag('app_begin'); * @param string $tag 標籤名稱 * @param mixed $params 傳入參數 * @return mixed */function tag($tag, &$params=NULL) {  // 系統或架構標籤擴充  // C('extends', include THINK_PATH.'Conf/tags.php');//這個檔案很重要  $extends  = C('extends.' . $tag);//$_config['extends'][app_init]  // 應用或項目標籤擴充  // C('tags', include CONF_PATH.'tags.php'); //項目中也可以編寫自己的tags.php檔案  $tags    = C('tags.' . $tag);//$_config['tags'][app_init]  if (!empty($tags)) {//如果$tags不為空白    if(empty($tags['_overlay']) && !empty($extends)) { // 合并擴充      $tags = array_unique(array_merge($extends,$tags));    }elseif(isset($tags['_overlay'])){ // 通過設定 '_overlay'=>1 覆蓋系統標籤      unset($tags['_overlay']);    }  }elseif(!empty($extends)) {    $tags = $extends;  }  if($tags) {    if(APP_DEBUG) {      G($tag.'Start');      trace('[ '.$tag.' ] --START--','','INFO');    }    // 執行擴充    foreach ($tags as $key=>$name) {      if(!is_int($key)) { // 指定行為類的完整路徑 用於模式擴充        $name  = $key;      }      //建立行為類對象,如:$class=$name.'Behavior';$behavior  = new $class();//建立一個行為類對象      B($name, $params);//執行某個行為,參數1-行為名稱  參數2-傳入的參數    }    if(APP_DEBUG) { // 記錄行為的執行日誌      trace('[ '.$tag.' ] --END-- [ RunTime:'.G($tag.'Start',$tag.'End',6).'s ]','','INFO');    }  }else{ // 未執行任何行為 返回false    return false;  }}

/** * 執行某個行為 * @param string $name 行為名稱 * @param Mixed $params 傳人的參數 * @return void */function B($name, &$params=NULL) {  //行為類在Think.class.php檔案中的autoload($class)函數中自動載入  $class   = $name.'Behavior';//行為類的名稱  G('behaviorStart');  $behavior  = new $class();//建立一個行為類對象  $behavior->run($params);//給當前行為類對象傳遞參數  if(APP_DEBUG) { // 記錄行為的執行日誌    trace('Run '.$name.' Behavior [ RunTime:'.G('behaviorStart','behaviorEnd',6).'s ]','','INFO');  }}

注意:行為類、模型類、控制器類 都是在Think.class.php檔案中的autoload函數中自動載入的:

/*** 系統自動載入ThinkPHP類庫* 並且支援配置自動載入路徑* @param string $class 對象類名* @return void*///行為類、模型類、控制器類 都是通過autoload函數自動載入的public static function autoload($class) {    // 檢查是否存在別名定義    if(alias_import($class)) return ;    //行為類都是通過此函數自動載入的    if(substr($class,-8)=='Behavior') { // 載入行為      if(require_cache(CORE_PATH.'Behavior/'.$class.'.class.php')        || require_cache(EXTEND_PATH.'Behavior/'.$class.'.class.php')        || require_cache(LIB_PATH.'Behavior/'.$class.'.class.php')        || (defined('MODE_NAME') && require_cache(MODE_PATH.ucwords(MODE_NAME).'/Behavior/'.$class.'.class.php'))) {        return ;      }    }elseif(substr($class,-5)=='Model'){ // 載入模型      if((defined('GROUP_NAME') && require_cache(LIB_PATH.'Model/'.GROUP_NAME.'/'.$class.'.class.php'))        || require_cache(LIB_PATH.'Model/'.$class.'.class.php')        || require_cache(EXTEND_PATH.'Model/'.$class.'.class.php') ) {        return ;      }    }elseif(substr($class,-6)=='Action'){ // 載入控制器      if((defined('GROUP_NAME') && require_cache(LIB_PATH.'Action/'.GROUP_NAME.'/'.$class.'.class.php'))        || require_cache(LIB_PATH.'Action/'.$class.'.class.php')        || require_cache(EXTEND_PATH.'Action/'.$class.'.class.php') ) {        return ;      }    }    // 根據自動載入路徑設定進行嘗試搜尋    $paths =  explode(',',C('APP_AUTOLOAD_PATH'));    foreach ($paths as $path){      if(import($path.'.'.$class))        // 如果載入類成功則返回        return ;    }}

以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.