class Think {
public static function start() {
// 注册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'); // 初始化文件存储方式
Storage::connect(STORAGE_TYPE); // ...
// /home/www/www.domain.com/core/Mode/common.php
$mode = include is_file(CONF_PATH.'core.php')?CONF_PATH.'core.php':MODE_PATH.APP_MODE.'.php'; //---------------- core ----------------
// 加载核心文件 /home/www/www.domain.com/core/Mode/common.php
foreach ($mode['core'] as $file){
if(is_file($file)) {
include $file;
if(!APP_DEBUG) $content .= compile($file);
}
}
// {
// /home/www/www.domain.com/core/Common/functions.php
// /home/www/www.domain.com/myapp/Common/functions.php
// /home/www/www.domain.com/core/Library/Think/Hook.class.php,
// /home/www/www.domain.com/core/Library/Think/App.class.php,
// /home/www/www.domain.com/core/Library/Think/Dispatcher.class.php,
// /home/www/www.domain.com/core/Library/Think/Route.class.php,
// /home/www/www.domain.com/core/Library/Think/Controller.class.php,
// /home/www/www.domain.com/core/Library/Think/View.class.php,
// /home/www/www.domain.com/core/Library/Behavior/BuildLiteBehavior.class.php,
// /home/www/www.domain.com/core/Library/Behavior/ParseTemplateBehavior.class.php,
// /home/www/www.domain.com/core/Library/Behavior/ContentReplaceBehavior.class.php,
// } //---------------- config ----------------
// 加载应用模式配置文件 /home/www/www.domain.com/core/Mode/common.php
foreach ($mode['config'] as $key=>$file){
is_numeric($key)?C(load_config($file)):C($key,load_config($file));
}
// $mode['config'] = {
// /home/www/www.domain.com/core/Conf/convention.php, // 系统惯例配置
// /home/www/www.domain.com/myapp/Common/Conf/config.php, // 应用公共配置
// } //---------------- alias ----------------
// 加载模式别名定义 /home/www/www.domain.com/core/Mode/common.php
if(isset($mode['alias'])){
self::addMap(is_array($mode['alias'])?$mode['alias']:include $mode['alias']);
}
// $mode['alias'] = {
// 'Think\Log' => '/home/www/www.domain.com/core/Library/Think/Log.class.php',
// 'Think\Log\Driver\File' => '/home/www/www.domain.com/core/Library/Think/Log/Driver/File',
// 'Think\Exception' => '/home/www/www.domain.com/core/Library/Think/Exception',
// 'Think\Model' => '/home/www/www.domain.com/core/Library/Think/Model',
// 'Think\Db' => '/home/www/www.domain.com/core/Library/Think/Db',
// 'Think\Template' => '/home/www/www.domain.com/core/Library/Think/Template',
// 'Think\Cache' => '/home/www/www.domain.com/core/Library/Think/Cache',
// 'Think\Cache\Driver\File' => '/home/www/www.domain.com/core/Library/Think/Cache/Driver/File',
// 'Think\Storage' => '/home/www/www.domain.com/core/Library/Think/Storage',
// } // 加载应用别名定义文件 /home/www/www.domain.com/<myapp>/Common/alias.php
if(is_file(CONF_PATH.'alias.php'))
self::addMap(include CONF_PATH.'alias.php'); //---------------- tags ----------------
// 加载模式行为定义 /home/www/www.domain.com/core/Mode/common.php
if(isset($mode['tags'])) {
// 如: self::$tags['app_init'][] = 'Behavior\BuildLiteBehavior';
Hook::import(is_array($mode['tags'])?$mode['tags']:include $mode['tags']);
}
// $mode['tags'] = {
// 'app_init' => array(
// 'Behavior\BuildLiteBehavior', // 生成运行Lite文件
// ),
// 'app_begin' => array(
// 'Behavior\ReadHtmlCacheBehavior', // 读取静态缓存
// ),
// 'app_end' => array(
// 'Behavior\ShowPageTraceBehavior', // 页面Trace显示
// ),
// 'view_parse' => array(
// 'Behavior\ParseTemplateBehavior', // 模板解析 支持PHP、内置模板引擎和第三方模板引擎
// ),
// 'template_filter'=> array(
// 'Behavior\ContentReplaceBehavior', // 模板输出替换
// ),
// 'view_filter' => array(
// 'Behavior\WriteHtmlCacheBehavior', // 写入静态缓存
// ),
// } // 加载应用行为定义 /home/www/www.domain.com/<myapp>/Common/Conf/tags.php
if(is_file(CONF_PATH.'tags.php'))
// 如:
// 定义: self::$tags['method1'][] = 'UnStandardBehavior\CheckClientIp';
// 执行: Hook::listen('method1');
// 允许应用增加开发模式配置定义
Hook::import(include CONF_PATH.'tags.php'); // 加载框架底层语言包 /home/www/www.domain.com/core/Lang/zh-cn.php
L(include THINK_PATH.'Lang/'.strtolower(C('DEFAULT_LANG')).'.php'); if(!APP_DEBUG){
// 生成合并后的执行文件
// /home/www/www.domain.com/<myapp>/Runtime/common~runtime.php
}else{
// 调试模式加载系统默认的配置文件 /home/www/www.domain.com/core/Conf/debug.php
C(include THINK_PATH.'Conf/debug.php'); // 读取应用调试配置文件 /home/www/www.domain.com/<myapp>/Common/Conf/debug.php
if(is_file(CONF_PATH.'debug'.CONF_EXT))
C(include CONF_PATH.'debug'.CONF_EXT);
} // ... // 设置系统时区
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);
}
}
// ... // 运行应用
App::run();
}
}

thinkphp 3.2.3 - Think.class.php 解析的更多相关文章

  1. thinkphp 3.2.3 - Route.class.php 解析(路由匹配)

    class Route { public static function check(){ $depr = C('URL_PATHINFO_DEPR'); // '/' $regx = preg_re ...

  2. thinkphp 3.2.3 - Dispatcher.class.php 解析(转发器)

    class Dispatcher { public static function dispatch() { $varPath = C('VAR_PATHINFO'); // 's' $varAddo ...

  3. thinkphp 3.2.3 - App.class.php 解析

    class App { public static function init() { load_ext_file(COMMON_PATH); // { // /home/www/www.domain ...

  4. ThinkPHP各个目录是什么含义ThinkPHP怎么安装和使用

    最近kdchxue看完了smarty之后,想学习下框架,于是乎就选择了ThinkPHP,听说这个框架简单易用,另外还是国产的!所以kdchxue毫不犹豫的就选择了ThinkPHP 了!下面看看Thin ...

  5. thinkphp cbd模式

    ThinkPHP从3.0版本开始引入了全新的CBD(核心Core+行为Behavior+驱动Driver)架构模式,因为从底层开始,框架就采用核心+行为+驱动的架构体系,核心保留了最关键的部分,并在重 ...

  6. ThinkPHP 3.2 模板中的Angularjs 的变量{{$first}} 无法被解析

    ThinkPHP 3.2 模板中的Angularjs 的变量"{{$first}}" 无法被解析, 模板解析冲突,例如在angularjs 的变量"{{$first}}& ...

  7. 解析使用ThinkPHP应该掌握的调试手段

    解析使用ThinkPHP应该掌握的调试手段     使用ThinkPHP应该掌握的调试手段经常看到有人问到findAll的返回数据类型是什么之类的问题,以及出错了不知道什么原因的情况,其实还是没有熟悉 ...

  8. ThinkPHP中URL解析原理,以及URL路由使用教程!

    几个概念: THINKPHP 是一个MVC框架,使用PATHINFO解析出分组名,模块名,方法名,以及参数. PATHINFO:就是 http://localhost/index.php/Home/I ...

  9. thinkphp从数据库里的html代码显示页面不解析

    首先,这个问题不应该出现在这里,因为以前在用ThinkPHP3.1.2的时候,利用富文本编辑器保存文本后,直接从数据库里面取出的数据都能正常显示,改用ThinkPHP3.2.3之后,thinkphp从 ...

随机推荐

  1. URLConnection简单使用

    1 --get提交 //资源url地址 URL url = new URL("http://localhost:8080/test/TestServlet?id=10"); //获 ...

  2. 使用原生javascript实现瀑布流

    简介 瀑布流布局是一种很常见的布局方式,他的主要视觉体验为图片元素等宽不等高,图片元素之间的水平排序参差不齐,而且随着滚动条的滚动,数据会进行异步的加载,这样的布局有两个好处,1-有视觉的冲击力,比较 ...

  3. 响应式及Bootstrap

    一丶CSS3的@media 查询 使用 @media 查询,你可以针对不同的屏幕大小定义不同的样式. @media 可以针对不同的屏幕尺寸设置不同的样式,特别是如果你需要设置设计响应式的页面,@med ...

  4. mysql decimal类型与decimal长度用法详解

    三者的区别介绍 float:浮点型,含字节数为4,32bit,数值范围为-3.4E38~3.4E38(7个有效位) double:双精度实型,含字节数为8,64bit数值范围-1.7E308~1.7E ...

  5. HDevEngine in .NET Applications MultiThreading

    Basics To use HDevEngine in Visual Studio .NET, you must add a reference to the HALCON/.NET assembly ...

  6. 人工智能背景下的 Office 365 现状和发展趋势

    谈论人工智能是让人兴奋的,因为它具有让人兴奋的两大特征 —— 每个人都似乎知道一点并且以知道一点为荣,但又好像没多少人能真正讲的明白.毫无疑问,我也仅仅是知道一点点,这一篇文章试图想通过比较接地气的方 ...

  7. xp_delete_files不起作用解决方法

    xp_delete_file用来删除数据库的备份文件和维护计划文本报告.示例: ,N'D:\Backup\Diff',N'bak',N'2019-05-29T10:03:41' 第一个参数表示文件类型 ...

  8. [转] python 远程主机强迫关闭了一个现有的连接 socket 超时设置 errno 10054

    python socket.error: [Errno 10054] 远程主机强迫关闭了一个现有的连接.问题解决方案: 前几天使用python读取网页.因为对一个网站大量的使用urlopen操作,所以 ...

  9. idea单元测试junit

    参考文章地址地址:http://blog.csdn.net/u011138533/article/details/52165577 本文按以下顺序讲解JUnit4的使用 下载jar包 单元测试初体验 ...

  10. SwiftHN阅读器应用IOS源码

    SwiftHN是用Swift语言编写的Hacker News阅读器,同时采用了iOS 8最新的API. <ignore_js_op> <ignore_js_op> 详细说明:h ...