• thinkphp 3+ 观后详解 (3)


    由于上一篇太长不好编辑,于是我重开了一篇。

              if('common' != APP_MODE && is_file(CONF_PATH.'config_'.APP_MODE.CONF_EXT))
                  C(load_config(CONF_PATH.'config_'.APP_MODE.CONF_EXT)); 
    

    这里将所有的配置文件都放在了static $_config 静态变量中。我不是很明白为什么要这样,于是查了下资料。

    php中的变量作用范围的另一个重要特性就是静态变量(static 变量)。静态变量仅在局部函数域中存在且只被初始化一次,当程序执行离开此作用域时,其值不会消失,会使用上次执行的结果。

    我的理解是让config的内容持久化。

              // 加载模式别名定义
              if(isset($mode['alias'])){
                  self::addMap(is_array($mode['alias'])?$mode['alias']:include $mode['alias']);
              }
    
              // 加载应用别名定义文件
              if(is_file(CONF_PATH.'alias.php'))
                  self::addMap(include CONF_PATH.'alias.php');

    这里是将模式别名定义和应用别名定义都存储在private static $_map      = array();数组中。

              if(isset($mode['tags'])) {
                  Hook::import(is_array($mode['tags'])?$mode['tags']:include $mode['tags']);
              }
    
              // 加载应用行为定义
              if(is_file(CONF_PATH.'tags.php'))
                  // 允许应用增加开发模式配置定义
                  Hook::import(include CONF_PATH.'tags.php'); 
    

    将应用行为定义都存储在Hook::$tags 中

              // 加载框架底层语言包
              L(include THINK_PATH.'Lang/'.strtolower(C('DEFAULT_LANG')).'.php');
    
              if(!APP_DEBUG){
                  $content  .=  "
    namespace { Think\Think::addMap(".var_export(self::$_map,true).");";
                  $content  .=  "
    L(".var_export(L(),true).");
    C(".var_export(C(),true).');ThinkHook::import('.var_export(Hook::get(),true).');}';
                  Storage::put($runtimefile,strip_whitespace('<?php '.$content));
              }else{
                // 调试模式加载系统默认的配置文件
                C(include THINK_PATH.'Conf/debug.php');
                // 读取应用调试配置文件
                if(is_file(CONF_PATH.'debug'.CONF_EXT))
                    C(include CONF_PATH.'debug'.CONF_EXT);           
              }

    语言包存在static $_lang = array();。配置文件都存在static $_config = array();写到这里的时候我感觉thinkphp思路就是把所有的文件都配置好,程序运行的时候都写在各种静态变量中。然后通过L,C之类的方法来进行修改和获取。

          // 记录加载文件时间
          G('loadTime');
          // 运行应用
          App::run();

    框架中所有的配置已经加载到内存完毕,开始执行应用程序了。

  • 相关阅读:
    东南大学2021年数学分析考研试卷
    东南大学2021年高等代数考研试卷
    东南大学2021年高等代数考研试卷
    东华大学2021年数学分析考研试卷
    东华大学2021年高等代数考研试卷
    [Oracle 工程师手记]探究 Oracle PDB Application Container (二)
    [Oracle 工程师手记]探究 Oracle PDB Application Container (一)
    Jenkins Extended choice parameter和Active Choices param 之Groovy Script使用
    C#异步调用,成功回调中更新界面(线程间操作无效)
    C#使用非托管 DLL 函数
  • 原文地址:https://www.cnblogs.com/best-jobs/p/4807203.html
Copyright © 2020-2023  润新知