php 配置加载函数 设计C,ThinkPHP源码阅读2-----C函数配置文件详解

ThinkPHP的配置非常灵活,可自定义加载.大概看了一下,一共有这几个地方会加载配置文件,方便以后的读取/**

* 获取和设置配置参数 支持批量定义

*

* @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 = S ( 'c_' . $value )) {

$_config = array_merge ( $_config, array_change_key_case ( $array ) );

}

return $_config;

}

// 优先执行设置获取或赋值

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 )) {

$_config = array_merge ( $_config, array_change_key_case ( $name ) );

if (! empty ( $value )) { // 保存配置值

S ( 'c_' . $value, $_config );

}

return;

}

return null; // 避免非法参数

}

C()函数在运行的时候,就会把配置文件中的配置都加载到C()函数中,以后只要需要的提取出来即可,而且可以临时增加自己的C函数

1.Think.class.php buildApp方法,加载公共配置文件Conf/convention.php,缓存到C方法里

// 加载核心惯例配置文件Think.class.php第60行

C(include THINK_PATH.'Conf/convention.php');

if(isset($mode['config'])) {// 加载模式配置文件

C( is_array($mode['config'])?$mode['config']:include $mode['config'] );

}

2.加载项目的config.php文件

// 加载项目配置文件  Think.class.php第66行

if(is_file(CONF_PATH.'config.php'))

C(include CONF_PATH.'config.php');

3.加载系统标签配置文件ThinkPHP/Conf/tags.php文件,C('extends');

// 加载模式系统行为定义

if(C('APP_TAGS_ON')) {

if(isset($mode['extends'])) {

C('extends',is_array($mode['extends'])?$mode['extends']:include $mode['extends']);

}else{ // 默认加载系统行为扩展定义

C('extends', include THINK_PATH.'Conf/tags.php');

}

}

4.加载应用标签配置APP/Conf/tags.php C('extends');

// 加载应用行为定义

if(isset($mode['tags'])) {

C('tags', is_array($mode['tags'])?$mode['tags']:include $mode['tags']);

}elseif(is_file(CONF_PATH.'tags.php')){

// 默认加载项目配置目录的tags文件定义

C('tags', include CONF_PATH.'tags.php');

}

5.如果是调试模式,则加载ThinkPHP/Conf/debug.php,和应用状态调试文件

if(APP_DEBUG) {

// 调试模式加载系统默认的配置文件

C(include THINK_PATH.'Conf/debug.php');

// 读取调试模式的应用状态

$status  =  C('APP_STATUS');

// 加载对应的项目配置文件

if(is_file(CONF_PATH.$status.'.php'))

// 允许项目增加开发模式配置定义

C(include CONF_PATH.$status.'.php');

}else{

// 部署模式下面生成编译文件

build_runtime_cache($compile);

}

6.App:init 调用function.php中得load_ext_file函数,加载自定义配置文件

在function.php中load_ext_file()函数中

/**

* 加载动态扩展文件

* @return void

*/

function load_ext_file() {

// 加载自定义外部文件

if(C('LOAD_EXT_FILE')) {

$files      =  explode(',',C('LOAD_EXT_FILE'));

foreach ($files as $file){

$file   = COMMON_PATH.$file.'.php';

if(is_file($file)) include $file;

}

}

// 加载自定义的动态配置文件

if(C('LOAD_EXT_CONFIG')) {

$configs    =  C('LOAD_EXT_CONFIG');

if(is_string($configs)) $configs =  explode(',',$configs);

foreach ($configs as $key=>$config){

$file   = CONF_PATH.$config.'.php';

if(is_file($file)) {

is_numeric($key)?C(include $file):C($key,include $file);

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值