澳门威利斯人_威利斯人娱乐「手机版」

来自 威利斯人娱乐 2020-02-03 07:31 的文章
当前位置: 澳门威利斯人 > 威利斯人娱乐 > 正文

2框架运行原理,ThinkPHP框架系统源码解析

thinkphp3.2是使用率极其分布的国产php框架,以简要轻便上手闻明,那么它框架构造是如何的?

即使只是从精晓怎么用这几函数的角度看,直接看官方透露的文书档案就可以!可是要打听那一个函数是怎么被ThinkPHP框架定义调用的,那要求此外生龙活虎番研讨了。万幸,ThinkPHP官方在源码力做了很好的批注,通过一步步研究本人发觉只要你找到代码的概念地点,你就会更典型的把握其利用,以至不用读代码, 官方的代码注释就能够帮您很好的理解。废话非常的少说,来看本身找的框架施行代码的多少个义务:

意气风发、ThinkPHP框架目录
/test/index.php //项目入口文件
/ThinkPHP/ThinkPHP.php //框架入口文件
 
Common 框架公共文件目录(函数库卡塔尔(قطر‎
ThinkPHP/Common/runtime.php //框架初次运营文件
ThinkPHP/Common/common.php //框架根底函数库
ThinkPHP/Common/functions.php //标准格局公共函数库
 
Conf 框架配置文件目录
ThinkPHP/Conf/convention.php  //惯例配置文件,系统暗中认可配置小于项目配置
ThinkPHP/Conf/debug.php //暗中认可的调节和测量试验方式配置文件
 
Lang 框架种类语言目录
 
Lib 系统核心基类库目录
ThinkPHP/Core/Think.class.php //入口文件(设置特别和错误管理机制、注册系统自动加运载飞机制、预编写翻译当前项目、加载框架惯例配置文件)
ThinkPHP/Lib/Core/Log.class.php,    // 日志管理类
ThinkPHP/Lib/Core/Dispatcher.class.php, // URL调度类
ThinkPHP/Lib/Core/App.class.php,   // 应用程序类
ThinkPHP/Lib/Core/Action.class.php, // 调控器类
ThinkPHP/Lib/Core/View.class.php,  // 视图类
 
Tpl 系统模板目录
ThinkPHP/Tpl/default_index.tpl //测量检验模块的沙盘
ThinkPHP/Tpl/dispatch_jump.tpl //页面提示的模板
ThinkPHP/Tpl/page_trace.tpl //页面Trace音讯的模版
ThinkPHP/Tpl/think_exception.tpl //系统错误音讯的沙盘模拟经营
 
Extend 框架扩大目录  

tp3.2计划简约来讲正是CBD,core,bebavior(行为,tp3.2一大特色就是钩子众多),driver(各个驱动,依据项目需求),针对那三大方面从源码来看框架的运转的原理。

   首先,从入口文件index.php里面来看框架的实施通过“require './ThinkPHP/ThinkPHP.php';”实践,展开这么些文件,看个中的start(State of Qatar 方法:

<?php
/*
 * 1、客户访问网址UPAJEROL地址 
 * /test/Index.php 项目入口文件
 */
require ('../ThinkPHP/ThinkPHP.php'State of Qatar;//引进框架文件

因为tp3.2的古老,所以进口文件并没有像5.0和任何主流框架这样做动静抽离,index.php直接放在根目录下,张开index.php,里面有引入框架大旨文件进而步向框架:

   ................................

/*
 * 2、载入系统入口文件ThinkPHP.php 
 * ThinkPHP/ThinkPHP.php框架入口文件
 * 推断系统常量,若无定义则自动生成
 */
$GLOBALS['_beginTime'] = microtime(TRUE卡塔尔国; //记录运转时的小时

威尼斯娱乐手机版网站 1

      static public function start() {
     // 注册AUTOLOAD方法
     spl_autoload_register('ThinkThink::autoload');      
     // 设定错误和非常管理
     register_shutdown_function('ThinkThink::fatalError');
     set_error_handler('ThinkThink::appError');
     set_exception_handler('ThinkThink::appException');

define('MEMORY_LIMIT_ON',function_exists('memory_get_usage'));//php中用echo memory_get_usage(卡塔尔 获取当前的内部存款和储蓄器消耗量 

接下来展开框架宗旨文件:

     // 开端化文件存款和储蓄格局
     Storage::connect(STORAGE_TYPE);

if(MEMORY_LIMIT_ON) $GLOBALS['_startUseMems'] = memory_get_usage(State of Qatar;//假若扶持内部存款和储蓄器使用量函数则全局变量$GLOBALS['_startUseMems']也便是内部存款和储蓄器使用量,这里一定于记录下内部存款和储蓄器初始使用的量

威尼斯娱乐手机版网站 2

     $runtimefile  = RUNTIME_PATH.APP_MODE.'~runtime.php';
     if(!APP_DEBUG && Storage::has($runtimefile)){
         Storage::load($runtimefile);
     }else{
         if(Storage::has($runtimefile))
             Storage::unlink($runtimefile);
         $content =  '';
         // 读取应用形式
         $mode   =   include is_file(CONF_PATH.'core.php')?CONF_PATH.'core.php':MODE_PATH.APP_MODE.'.php';
         // 加载大旨文件
         /*Array
(
   [0] => C:wampwwwonthinkThinkPHP/Common/functions.php
   [1] => ./Application/Common/Common/function.php
   [2] => C:wampwwwonthinkThinkPHPLibrary/Think/Hook.class.php
   [3] => C:wampwwwonthinkThinkPHPLibrary/Think/App.class.php
   [4] => C:wampwwwonthinkThinkPHPLibrary/Think/Dispatcher.class.php
   [5] => C:wampwwwonthinkThinkPHPLibrary/Think/Route.class.php
   [6] => C:wampwwwonthinkThinkPHPLibrary/Think/Controller.class.php
   [7] => C:wampwwwonthinkThinkPHPLibrary/Think/View.class.php
   [8] => C:wampwwwonthinkThinkPHPLibrary/Behavior/ParseTemplateBehavior.class.php
   [9] => C:wampwwwonthinkThinkPHPLibrary/Behavior/ContentReplaceBehavior.class.php
)
          */
         foreach ($mode['core'] as $file){
             if(is_file($file)) {
               include $file;
               if(!APP_DEBUG) $content   .= compile($file);
             }
         }

defined('APP_PATH') or define('APP_PATH', dirname($_SERVER['SCRIPT_FILENAME']卡塔尔国.'/'卡塔尔(قطر‎;//设置当前的系列路径

先是看见的是概念的一批系统常量,包涵分明了类名后缀必得是.class.php结尾,最后引进并且运转了框架应用,今后间框架逻辑正式启幕。

         // 加载应用情势配置文件
         foreach ($mode['config'] as $key=>$file){
             is_numeric($key)?C(include $file):C($key,include $file);
         }

defined('RUNTIME_PATH') or define('RUNTIME_PATH',APP_PATH.'Runtime/');//设置runtime的路径

威尼斯娱乐手机版网站 3

         // 读取当前使用格局对应的配备文件
         if('common' != APP_MODE && is_file(CONF_PATH.'config_'.APP_MODE.'.php'))
             C(include CONF_PATH.'config_'.APP_MODE.'.php');  

defined('APP_DEBUG') or define('APP_DEBUG',falseState of Qatar; // 是还是不是调节和测量检验情势,私下认可false

继之,展开核心Think大旨类,首先特别捕捉处理,

         // 加载方式外号定义
         if(isset($mode['alias'])){
             self::addMap(is_array($mode['alias'])?$mode['alias']:include $mode['alias']);
         }

$runtime = defined('MODE_NAME')?'~'.strtolower(MODE_NAME).'_runtime.php':'~runtime.php';//要是设置了另对外运输行形式则~ruturn.php就变化为 ~方式ruturn.php,(比如,接纳命令行格局运作),那么在输入文件中定义MODE_NAME如下define('MODE_NAME','cli'卡塔尔;  那么这里的缓存文件就为~cliruturn.php

// 注册AUTOLOAD方法

spl_autoload_register('ThinkThink::autoload');

// 设定错误和丰盛管理

register_shutdown_function('ThinkThink::fatalError');

set_error_handler('ThinkThink::appError');

set_exception_handler('ThinkThink::appException');

         // 加载应用外号定义文件
         if(is_file(CONF_PATH.'alias.php'))
             self::addMap(include CONF_PATH.'alias.php');

defined('RUNTIME_FILE') or define('RUNTIME_FILE',RUNTIME_PATH.$runtime);//设置~runtime.php的路径;

register_shutdown_威尼斯娱乐手机版网站,function,set_error_handler,set_exception_handler三段式,基本各样框架都会有。

         // 加载格局表现定义
         if(isset($mode['tags'])) {
             Hook::import(is_array($mode['tags'])?$mode['tags']:include $mode['tags']);
         }

if(!APP_DEBUG && is_file(RUNTIME_FILE)) {
    // 布置情势直接载入运维缓存
    require RUNTIME_FILE;
}else{//高度形式下加载框架下的Common/runtime.php文件;大家就模拟程序第一回运营,从上边初阶步向
    // 系统目录定义
    defined('THINK_PATH') or define('THINK_PATH', dirname(__FILE__).'/');
    // 加载运维时文件,载入系统运营时文件runtime.php并定义项目路径常量
    require THINK_PATH.'Common/runtime.php';
}

进而是加载缓存文件

         // 加载应用行为定义
         if(is_file(CONF_PATH.'tags.php'))
             // 允许利用扩充开销格局配置定义
             Hook::import(include CONF_PATH.'tags.php');  

/*
 * 3、载入系统运维时文件runtime.php并定义项目路径常量
 * ThinkPHP/Common/runtime.php 系统运营时文件
 * ThinkPHP 运维时文件 编写翻译后不再加
 */

本文由澳门威利斯人发布于威利斯人娱乐,转载请注明出处:2框架运行原理,ThinkPHP框架系统源码解析

关键词: 澳门威利斯人 框架 快速 原理