This article mainly introduces the function function of common/common.php file in thinkphp, and analyzes the function and code principle of C method, tag method, B method and AutoLoad method in detail by the form of annotations, and the need of friends can refer to
This paper analyzes the functions of thinkphp/common/common.php file. Share to everyone for your reference, as follows:
/** * Get and set configuration parameters support Bulk definition * @param string|array $name Configuration variables * @param mixed $value configuration values * @return mixed */function C ($name =null, $value =null) {Static $_config = array (); Get all if (empty ($name)) {if (!empty ($value) && $array = cache (' c_ '. $value) without parameters {//array_change_key_ca SE (): Changes all key names in the array to full lowercase or uppercase, and defaults to full lowercase $_config = Array_merge ($_config, Array_change_key_case ($array)); } return $_config; }//Priority execution set get or assign, if parameter 2 is empty, is the case where the value of the configuration variable is obtained, or if parameter 2 is not NULL, if the value is set for the configuration variable if (is_string ($name)) {//sets the value for the configuration variable or gets the value of the configuration variable if (!STRP OS ($name, '. ')) {//If there is no '. ' In the configuration variable name, execute the following code $name = Strtolower ($name);//Convert the configuration variable name to lowercase if (is_null ($value)) return Isset ($_conf ig[$name])? $_config[$name]: null;//Gets the configuration variable value, returns the value of the configuration variable $_config[$name] = $value;//sets the value of the configuration variable return; }//Two-D array set up and get support $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;//Gets the value of theConditions $_config[$name [0]][$name [1]] = $value;//Assignment return; }//Bulk Set if (Is_array ($name)) {//Bulk Set Value//array_change_key_case (): Change all the key names in the array to full lowercase or uppercase, default to full lowercase, note: Just change the key name to lowercase oh $_config = Array_merge ($_config, Array_change_key_case ($name)); if (!empty ($value)) {//Save config Value cache (' C_ '. $value, $_config); } return; } return null; Avoid illegal parameters}
/** * processing tag extension, such as: Project start tag call, tag (' App_begin '); * @param string $tag tag name * @param mixed $params incoming parameter * @return mixed */function tag ($tag, & $params =null) {//System or frame label Sign extension//C (' extends ', include Think_path. ' conf/tags.php ');//This file is important $extends = C (' extends. $tag);//$_config[' extends '] [App_init]//Application or Project Tag extension//C (' tags ', include conf_path. ' tags.php '); The project can also write its own tags.php file $tags = C (' tags. ' $tag);//$_config[' tags '][app_init] if (!empty ($tags)) {//If $tags is not empty if (Empty ($tags [' _overlay ']) &&!empty ($extends)) {//merge extension $tags = Array_unique (Array_merge ($extends, $tags)); }elseif (Isset ($tags [' _overlay ')) {//By setting ' _overlay ' =>1 override system label unset ($tags [' _overlay ']); }}elseif (!empty ($extends)) {$tags = $extends; if ($tags) {if (app_debug) {G ($tag. ' Start '); Trace (' ['. $tag. ']--start--', ' ', ' INFO '); }//Execute extension foreach ($tags as $key + $name) {if (!is_int ($key)) {///Specify the full path of the behavior class for pattern expansion $name = $key; }//ChongCCB is a class object such as: $class = $name. ' Behavior '; $behavior = new $class ();//Create a Behavior Class object B ($name, $params);//Perform a behavior, parameter 1-behavior name parameter 2-passed in parameter } if (App_debug) {//record the behavior of the execution log trace (' ['. $tag. ']--end--[RunTime: '. G ($tag. ' Start ', $tag. ' End ', 6). ' S] ', ' ', ' INFO '); }}else{//did not perform any behavior that returns false to return to false; }}
/** * Execute a behavior * @param string $name behavior name * @param Mixed $params-to-descendant parameters * @return void */function B ($name, & $params =null) { //The behavior class is automatically loaded in the AutoLoad ($class) function in the Think.class.php file $class = $name. ' Behavior ';//The name of the behavior class G (' Behaviorstart '); $behavior = new $class ();//Create a Behavior class object $behavior->run ($params);//pass parameter if (app_debug) {//To the current Behavior class object) Record the execution log of the behavior trace (' Run '. $name. ' Behavior [RunTime: '. G (' Behaviorstart ', ' Behaviorend ', 6). ' S] ', ' ', ' INFO ');} }
Note: The behavior class, model class, and controller class are automatically loaded in the AutoLoad function in the Think.class.php file:
/*** system automatically loads the Thinkphp class library * and supports configuring the auto-load path * @param string $class object class name * @return void*///behavior class, model class, controller class are automatically loaded through the AutoLoad function public static function AutoLoad ($class) {//Check if there is an alias definition if (Alias_import ($class)) return; The behavior class is automatically loaded by this function if (substr ($class, -8) = = ' Behavior ') {//Load 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 ') {//Load 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 ') {//Load controller 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; }}//Try searching according to the automatic load path settings $paths = Explode (', ', C (' App_autoload_path ')); foreach ($paths as $path) {if (Import ($path. '. '). $class))//returns return if the Load class succeeds; }}
The above is the whole content of this article, I hope that everyone's learning has helped, more relevant content please pay attention to topic.alibabacloud.com!