thinkphp源码讲解——配置管理C函数
2017-09-30 16:34
141 查看
这一篇文章,我们主要对thinkphp中的C函数进行一下分析拆解,C函数我个人感觉真的是个非常方便的函数,而且非常的实用,我们看看源码和我自己添加的注释吧:
在这里我想说一点的地方就是第27行,最开始的时候是先将我们的基础配置文件convention.php写进了静态变量$_config中的,所以后期我们可以很方便的读取基础配置,像这样的语句,就可以很方便的调取到我们的配置项目,
其实我还想提到一点就是,它这样的逻辑也确实是很精巧,函数用的最多的就是读取配置,所以它将读取的功能写到最前边,用的少的功能写到后边,在这里我不理解的地方就是为什么将
function C($name=null, $value=null) { static $_config = array();//定义一个静态变量,主要作用是存储所有的配置项便于存取 // 无参数时获取所有 if (empty($name)) return $_config;//看图1 // 优先执行设置获取或赋值 if (is_string($name)) {//如果$name是一个字符串如 $name='key' 或者 $name='key1.key2'; if (!strpos($name, '.')) {//如果字符串中不存在'.',就想上一行的第一种形式, $name = strtolower($name);//小写化 if (is_null($value)){//如果没有设定$value的值 return isset($_config[$name]) ? $_config[$name] : null;//这里就体现出静态变量的NB之处,如果已经存在配置项则返回配置项 }//这里的括号是我自己加的 方便大家阅读 $_config[$name] = $value;//如果静态变量中没有设定,就将配置项写入静态变量。 return; } // 二维数组设置和获取支持 $name = explode('.', $name);//针对第二种形式$name='key1.key2';这个时候$name为一个小数组 $name[0] = strtolower($name[0]);//小写第一个参数 if (is_null($value)){ return isset($_config[$name[0]][$name[1]]) ? $_config[$name[0]][$name[1]] : null;//同理,如果静态变量$_config配置项中存在$_config['key1']['key2']则返回配置值。 }//括号仍然是我自己加的 $_config[$name[0]][$name[1]] = $value;//如果没有则写入静态变量$_config中 return; } // 批量设置 if (is_array($name)){//如果是一个数组,则将现有的静态变量$_config的值和新的这个$name的值合并起来。其实最开始的时候是先将配置文件读到静态变量$_config中的这点很重要 return $_config = array_merge($_config, array_change_key_case($name)); } return null; // 避免非法参数 }当你在脚本中直接调用C();返回的内容如图1
在这里我想说一点的地方就是第27行,最开始的时候是先将我们的基础配置文件convention.php写进了静态变量$_config中的,所以后期我们可以很方便的读取基础配置,像这样的语句,就可以很方便的调取到我们的配置项目,
$db = $this->dbName?$this->dbName:C('DB_NAME');
其实我还想提到一点就是,它这样的逻辑也确实是很精巧,函数用的最多的就是读取配置,所以它将读取的功能写到最前边,用的少的功能写到后边,在这里我不理解的地方就是为什么将
if (empty($name)) return $_config;//看图1这段代码写到第一个判断中,这个应用的比较少的~~当然我们菜鸟不好揣测大神的意思,也希望哪位大神看到之后能指点一下
相关文章推荐
- ThinkPHP源码阅读2-----C函数配置文件详解
- Struts2 源码分析——配置管理之ContainerProvider接口
- 【推荐】使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享 推荐
- hadoop 2.x之HDFS HA讲解之五 HA管理命令、元数据同步和基于QJM方式存储的硬件配置说明
- ThinkPHP惯例配置讲解
- Struts2 源码分析——配置管理之ContainerProvider接口
- web版源码管理软件SCM-Manager安装配置
- 使用Jquery+EasyUI 进行框架项目开发案例讲解之五--模块(菜单)管理源码分享 推荐
- C# ASP.NET 通用权限管理系统组件源码中WCF例子程序客户端运行详细配置参考
- 个人源码管理:如何在本机配置自己的SVN Repository (图解)
- 淘宝动态配置diamond-client 源码讲解
- 引用-VS 2003 源码配置管理(subversion+apache)
- C# ASP.NET 通用权限管理系统组件源码中WCF例子程序服务器端运行详细配置参考
- thinkphp5配置讲解
- 使用Jquery+EasyUI 进行框架项目开发案例讲解之二---用户管理源码分享
- phpLDAPadmin 安装配置讲解,通过 Web 端来管理您的 LDAP 服务器
- 个人源码管理:如何在本机配置自己的SVN Repository (图解)
- 使用Jquery+EasyUI 进行框架项目开发案例讲解之四---组织机构管理源码分享
- (转)使用Jquery+EasyUI 进行框架项目开发案例讲解之四---组织机构管理源码分享
- sphinx的配置详情讲解和配置性能优化管理中文解释