美文网首页
源码阅读-ThinkPHP-4-应用初始化

源码阅读-ThinkPHP-4-应用初始化

作者: 苏近之2017 | 来源:发表于2017-06-06 16:34 被阅读0次

    说好的应用初始化

    上回书说到 ThinkPHP 框架入口文件,加载了框架Think.class.php,并执行了静态方法start()。那么在start()这个静态方法中,又做了哪些呢?

    本回书继续说道说道。

    应用初始化做什么?

    如下步骤:

    注册AUTOLOAD方法

    spl_autoload_register('Think\Think::autoload'); 
    

    使用spl_autoload_register注册了Think\Think::autoload这个静态方法,当类不存在的时候调用这个方法,以自动加载不存在的类。

    设定错误和异常处理

    register_shutdown_function('Think\Think::fatalError');
    set_error_handler('Think\Think::appError');
    set_exception_handler('Think\Think::appException');
    

    当 PHP 终止执行的时候,当 PHP 执行错误的时候,当 PHP 抛出异常的时候,一直这些函数设定的静态方法,来处理错误与异常。

    初始化文件存储方式

    Storage::connect(STORAGE_TYPE);
    

    这里的STORAGE_TYPE的值有两种可能,分别是Sae或者File

    SAE 是新浪云平台,由于不支持直接写入文件,所以这里定义了 SAE 的模式。

    加载核心文件

    加载什么核心文件呢?

    $mode   =   include is_file(CONF_PATH.'core.php')?CONF_PATH.'core.php':MODE_PATH.APP_MODE.'.php';
    

    吐槽一下这种写法,不直观,我觉得应该在写成include(),而不是include

    如果/ThinkPHP/Think/core.php不存在,那么加载/ThinkPHP/Model/common.php

    foreach ($mode['core'] as $file){
        if(is_file($file)) {
        include $file;
        if(!APP_DEBUG) 
            $content   .=  compile($file);
        }
    }
    

    这里的$file都是写什么?我们来看看/ThinkPHP/Modle/common.php

    'core'      =>  array(
        THINK_PATH.'Common/functions.php',
        COMMON_PATH.'Common/function.php',
        CORE_PATH . 'Hook'.EXT,
        CORE_PATH . 'App'.EXT,
        CORE_PATH . 'Dispatcher'.EXT,
        //CORE_PATH . 'Log'.EXT,
        CORE_PATH . 'Route'.EXT,
        CORE_PATH . 'Controller'.EXT,
        CORE_PATH . 'View'.EXT,
        BEHAVIOR_PATH . 'BuildLiteBehavior'.EXT,
        BEHAVIOR_PATH . 'ParseTemplateBehavior'.EXT,
        BEHAVIOR_PATH . 'ContentReplaceBehavior'.EXT,
    ),
    

    引入了function文件,终于可以使用dump()函数了,真高兴。之后的代码中可以看到例如C()这样的单字母大写函数了。

    终于看到RouteController以及View这些单词了,距离 MVC 还远吗?

    加载核心的配置文件:

    foreach ($mode['config'] as $key=>$file){
        is_numeric($key)?C(load_config($file)):C($key,load_config($file));
    }
    

    哪些核心的配置文件:

    'config'    =>  array(
        THINK_PATH.'Conf/convention.php',   // 系统惯例配置
        CONF_PATH.'config'.CONF_EXT,      // 应用公共配置
    ),
    

    然后需要加载用户的配置文件:

    foreach ($mode['config'] as $key=>$file){
        is_numeric($key)?C(load_config($file)):C($key,load_config($file));
    }
    

    加载模式别名定义

    加载应用别名定义文件

    加载模式行为定义

    加载应用行为定义

    加载框架底层语言包

    读取当前应用状态对应的配置文件

    设置系统时区

    date_default_timezone_set(C('DEFAULT_TIMEZONE'));
    

    设定用于一个脚本中所有日期时间函数的默认时区。

    检查应用目录结构

    检查目录的结构,如果不存在,则创建。

      if(C('CHECK_APP_DIR')) {
          $module     =   defined('BIND_MODULE') ? BIND_MODULE : C('DEFAULT_MODULE');
          if(!is_dir(APP_PATH.$module) || !is_dir(LOG_PATH)){
              // 检测应用目录结构
              Build::checkDir($module);
          }
      }
    

    记录加载文件时间

    G('loadTime');
    

    运行应用

    App::run();

    相关文章

      网友评论

          本文标题:源码阅读-ThinkPHP-4-应用初始化

          本文链接:https://www.haomeiwen.com/subject/aqfnfxtx.html