博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ThinkPHP源码阅读2-----C函数配置文件详解
阅读量:7036 次
发布时间:2019-06-28

本文共 3738 字,大约阅读时间需要 12 分钟。

      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);            }        }    }}

     


footer.jpg

转载地址:http://jxjal.baihongyu.com/

你可能感兴趣的文章
spark rdd saveAsTextFile保存为文件
查看>>
修改 sql 提示符信息:
查看>>
SQL Server Service Broker创建单个数据库会话(消息队列)
查看>>
flask-session组件
查看>>
从线程池到synchronized关键字详解
查看>>
SpringBoot单元测试中的事务和Session
查看>>
机器学习领域的一些顶级会议
查看>>
红烧瘦肉
查看>>
java中继承关系学习小结
查看>>
BZOJ 1823: [JSOI2010]满汉全席(2-SAT)
查看>>
Nginx软件优化
查看>>
mysql-\g和\G的作用
查看>>
actionbar tab 字体大小设置
查看>>
002-序列化装换JSON&XML概述
查看>>
2018春招头条第一批
查看>>
响应式编程总览
查看>>
解决使用elementUI框架el-upload上传组件时session丢失问题
查看>>
Spring之WEB模块
查看>>
分布式爬虫系统设计、实现与实战:爬取京东、苏宁易购全网手机商品数据+MySQL、HBase存储...
查看>>
什么是epoll
查看>>