ThinkPHP3.2.3源码分析一之系统流程

本文详细分析了ThinkPHP3.2.3框架的系统流程,从初始化、应用模式的编译缓存加载、App初始化和URL解析,到Action执行和模板解析,最后是收尾流程。主要涉及ThinkPHP核心类库和关键文件的作用,如Think.class.php、App.class.php、Controller.class.php和View.class.php。
摘要由CSDN通过智能技术生成

ThinkPHP3.2.3源码分析一之系统流程

整体流程

红色的时钩子,蓝色为配置文件或函数定义文件

这里写图片描述

一 初始化

主要文件加载

\thinkphp_3.2.3\index.php
\thinkphp_3.2.3\ThinkPHP\ThinkPHP.php
\thinkphp_3.2.3\ThinkPHP\Library\Think\Think.class.php
\thinkphp_3.2.3\ThinkPHP\Library\Think\Storage.class.php
\thinkphp_3.2.3\ThinkPHP\Library\Think\Storage\Driver\File.class.php

简单流程

\index.php
// 检测PHP环境
if(version_compare(PHP_VERSION,'5.3.0','<'))  die('require PHP > 5.3.0 !');

// 开启调试模式 建议开发阶段开启 部署阶段注释或者设为falseW
define('APP_DEBUG',True);

// 定义应用目录
define('APP_PATH','./Application/');

// 引入ThinkPHP入口文件
require './ThinkPHP/ThinkPHP.php';
\ThinkPHP\ThinkPHP.php
// 记录开始运行时间
$GLOBALS['_beginTime'] = microtime(TRUE);

// 记录内存初始使用
define('MEMORY_LIMIT_ON',function_exists('memory_get_usage'));
if(MEMORY_LIMIT_ON) $GLOBALS['_startUseMems'] = memory_get_usage();

// 系统常量定义
defined('THINK_PATH')   or define('THINK_PATH',     __DIR__.'/');
defined('APP_PATH')     or define('APP_PATH',       dirname($_SERVER['SCRIPT_FILENAME']).'/');
defined('APP_STATUS')   or define('APP_STATUS',     ''); // 应用状态 加载对应的配置文件
defined('APP_DEBUG')    or define('APP_DEBUG',      false); // 是否调试模式

///  用宏定义define定义大量的系统状态和系统路径
/// 判断操作系统,php版本,运行方式(cgi,sapi)来特殊处理常量定义

// 加载核心Think类
require CORE_PATH.'Think'.EXT;
// 应用初始化 
Think\Think::start();
\ThinkPHP\Library\Think\Think.class.php
static public function start() {
   
      // 注册AUTOLOAD方法
      // 主要时去系统目录找类文件,或从应用配置文件注册的命名空间路径找
      // array('Think','Org','Behavior','Com','Vendor')
      // C('AUTOLOAD_NAMESPACE');
      // 兼容处理不开命名空间的项目
      spl_autoload_register('Think\Think::autoload');

      // 设定系统错误和异常处理函数注册

      // 脚本正常结束或者手动或异常终结处理
      // 处理: 1.内存中的日志落地到文件 2.如果是异常终止,则输出错误
      register_shutdown_function('Think\Think::fatalError');

      //系统致命错误处理
      //级别_USER_ERROR的写日志,页面输出提示
      //低级别WARN NOTICE 等输出PageTrace,不影响脚本
      set_error_handler('Think\Think::appError');

      //系统抛出异常处理
      //写日志,页面输出
      set_exception_handler('Think\Think::appException');

      // 初始化文件存储方式
      Storage::connect(STORAGE_TYPE);
\ThinkPHP\Library\Think\Storage.class.php
\ThinkPHP\Library\Think\Storage\Driver\File.class.php (or Sae)
//此处文件缓存类,兼容本地缓存和sae的分布式文件环境。

class Storage {
   

    /**
     * 操作句柄
     * @var string
     * @access protected
     */
    static protected $handler    ;

    /**
     * 连接分布式文件系统
     * @access public
     * @param string $type 文件类型
     * @param array $options  配置数组
     * @return void
     */
    static public function connect($type='File',$options=array()) {
   
        $class  =   'Think\\Storage\\Driver\\'.ucwords($type);
        self::$handler = new $class($options);
    }

    static public function __callstatic($method,$args){
   
        / 魔术方法 调用文件缓存驱动类的方法
        //调用缓存驱动的方法
        if(method_exists(self::$handler, $method)){
           return call_user_func_array(array(self::$handler,$method), $args);
        }
    }
}

二 应用模式的编译缓存和配置文件加载

主要文件加载

\thinkphp_3.2.3\ThinkPHP\Mode\common.php
\thinkphp_3.2.3\ThinkPHP\Common\functions.php
\thinkphp_3.2.3\ThinkPHP\Library\Think\Hook.class.php

简单流程

\ThinkPHP\Library\Think\Think.class.php
$runtimefile  = RUNTIME_PATH.APP_MODE.'~runtime.php';
        // 部署模式并且已缓存的情况下,直接load编译缓存文件,此处的load实质是include文件
      if(!APP_DEBUG && Storage::has($runtimefile)){
          Storage::load($runtimefile);
      }else{
          // debug模式或无缓存文件时
          // 1.清理可能存在的过期缓存文件
          // 2. 加载一堆配置文件,语言包(这里的配置加载到内寸中,一般是存在全局函数作用域的静态变量,或者在类的静态成员变量中)
          // 3. 部署模式下,缓存起应用编译文件(编译过程,去掉注释空白,替换预编译的字符串, 写入导入配置的代码段)
          // 4 debug模式下,导入debug对应的系统配置,应用配置

          if
ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,是为了敏捷WEB应用 开发和简化企业级应用开发而诞生的。拥有众多的优秀功能和特性,经历了三年多发展的同时,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和 改进,众多的典型案例确保可以稳定用于商业以及门户级的开发。 ThinkPHP借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,采用单一入口模式等,融合了Struts的 Action思想和JSP的TagLib(标签库)、RoR的ORM映射和ActiveRecord模式,封装了CURD和一些常用操作,在项目配置、类 库导入、模版引擎、查询语言、自动验证、视图模型、项目编译、缓存机制、SEO支持、分布式数据库、多数据库连接和切换、认证机制和扩展性方面均有独特的 表现。 使用ThinkPHP,你可以更方便和快捷的开发和部署应用。当然不仅仅是企业级应用,任何PHP应用开发都可以从ThinkPHP的简单 和快速的特性中受益。ThinkPHP本身具有很多的原创特性,并且倡导大道至简,开发由我的开发理念,用最少的代码完成更多的功能,宗旨就是让WEB应 用开发更简单、更快速。为此ThinkPHP会不断吸收和融入更好的技术以保证其新鲜和活力,提供WEB应用开发的最佳实践! ThinkPHP遵循Apache2开源许可协议发布,意味着你可以免费使用ThinkPHP,甚至允许把你基于ThinkPHP开发的应用开源或商业产 品发布/销售。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值