您的位置:首页 > 编程语言 > PHP开发

thinkphp源码讲解——配置管理C函数

2017-09-30 16:34 141 查看
这一篇文章,我们主要对thinkphp中的C函数进行一下分析拆解,C函数我个人感觉真的是个非常方便的函数,而且非常的实用,我们看看源码和我自己添加的注释吧:

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
相关文章推荐