thinkphp学习--C方法详解
thinkphp学习--C方法详解
share_good 发表于4年前
thinkphp学习--C方法详解
  • 发表于 4年前
  • 阅读 255
  • 收藏 0
  • 点赞 0
  • 评论 0
摘要: 用过thinkphp的朋友都知道,C()方法在整个框架中用的非常普遍,C方法的实现非常简单,但是功能非常强大,那么C方法到底有什么奥秘呢?

  1.C方法的作用   (注: C 笔者认为是config的缩写)

            a. 加载设置用户的配置,保存在一个C函数内的静态变量$_config 中

            b. 读取用户的配置 (从$_congig 中读取)

  2. 需求分析:

            1.设置变量

                        1.二维数组

                                 C(array('DB_PASSWORD'=>'root','DB_USERNAME'=>'root'),'DB');

                                 C('DB.USER_NAME','XIAOCHEN);

                        2.一维数组

                                C('USER_NAME','小陈');

                                C(array('USER_NAME'=>'chen','USER_HEIGHT'=>'170'));

            2.读取变量 

                        一维:   C('USER_NAME');

                        二维:  C('DB.DB_PASSWORD');

            3.调试时,查看所有的配置信息

                        C();

3.存放方式及为什么要这样存储?

          首先我们来看一个问题  $arr=array('db'=>'mysql','DB'=>'mysql','Db'=>'mysql'); 从这个数组我们可以看到db都是指向了mysql,但是在却占用了三个存放空间,在项目的开发不是由一个人完成,每个人的书写习惯可能不一样,所以为了避免这种情况,统一的下标转为小写(当然大写也是可以的),由于配置文件在中的数组只有最多只有二维,把一维数组的下标小写就够了

4.实战中是怎么用的?

       php由于对数组的操作非常便捷,所以配置文件一般是写在一个配置文件中,以数组的形式返回

  一般格式为:    config.php        <?  return array('DB'=>'mysql',......);     

        把变量写入到C中  :  C(include 'config.php');     写入后C('DB') 就可以获取值了

5.笔者写的  (新增动态添加二维配置的功能)

      即 C(array('name'=>'mysql','password'=>'root'),'db') 执行后        array('db'=>array('name'=>'mysql','password'=>root))   

代码示例: 

                    

function C($name=null,$value=null){
		static $_config = array();
		 if(!is_null($name)){
		 	if(is_string($name)){
		 		if(is_null($value)){
		 			if(!strpos($name,'.')){
		 				$name = strtolower($name);
		 				return isset($_config[$name]) ? $_config[$name] : null; 
		 			}else{
		 				$name = explode('.',$name);
		 				$name[0] = strtolower($name[0]);
		 				return isset($_config[$name[0]][$name[1]]) ? $_config[$name[0]][$name[1]] : null;
		 			}
		 		}else{
		 			if(!strpos($name,'.')){
		 				$_config[strtolower($name)] = $value;
		 			}else{
		 				$name = explode('.',$name);
		 				$_config[strtolower($name[0])][$name[1]] = $value;
		 			}
		 			return ;
		 		}
		 	}elseif(is_array($name)){
		 		if(is_null($value))
		 			$_config = array_merge($_config,$name);
		 		else{
		 			$_config[$value] = $name;
		 		}
		 		return ;
		 	}
		 }else{
		 	   return empty($_config) ? null: $_config;
		}
}


共有 人打赏支持
粉丝 19
博文 7
码字总数 3352
×
share_good
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: