接上一章的内容,我们继续来看Think.class.php文件的start方法
static public 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);
spl_autoloader,很常见的自动加载类的函数,现在任何框架都会实现这个方式。
register_shutdown_function('Think\Think::fatalError'); 对致命错误进行的报错进行重写
set_error_handler('Think\Think::appError'); 对error级别错误报错进行重写
set_exception_handler('Think\Think::appException'); 对异常报错进行的重写
// 初始化文件存储方式
Storage::connect(STORAGE_TYPE);
static public function connect($type='File',$options=array()) {
$class = 'Think\\Storage\\Driver\\'.ucwords($type);
self::$handler = new $class($options);
}
这里是初始化文件存储方式的代码,首先用Storge::connect来加载文件,然后又通过$class变量来选择对应的文件系统。这种设计模式我目前还没想到是什么,感觉是工厂模式,不过又像是其他的,自己基础不牢,回去后再看下吧。
$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'; // 加载核心文件 foreach ($mode['core'] as $file){ if(is_file($file)) { include $file; if(!APP_DEBUG) $content .= compile($file); } }
这里是看是否有运行缓存文件,如果有并且是DEBUG模式,直接加载缓存文件,否则将删除缓存文件。
读取应用模式,这里先找dirname($_SERVER['SCRIPT_FILENAME']).'/') . Common/Conf/core.php 中寻找,如果没有则加载Mode/sae.php
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: luofei614 <weibo.com/luofei614>
// +----------------------------------------------------------------------
/**
* ThinkPHP SAE应用模式定义文件
*/
return array(
// 配置文件
'config' => array(
THINK_PATH.'Conf/convention.php', // 系统惯例配置
CONF_PATH.'config'.CONF_EXT, // 应用公共配置
MODE_PATH.'Sae/convention.php',//[sae] sae的惯例配置
),
// 别名定义
'alias' => array(
'Think\Log' => CORE_PATH . 'Log'.EXT,
'Think\Log\Driver\File' => CORE_PATH . 'Log/Driver/File'.EXT,
'Think\Exception' => CORE_PATH . 'Exception'.EXT,
'Think\Model' => CORE_PATH . 'Model'.EXT,
'Think\Db' => CORE_PATH . 'Db'.EXT,
'Think\Template' => CORE_PATH . 'Template'.EXT,
'Think\Cache' => CORE_PATH . 'Cache'.EXT,
'Think\Cache\Driver\File' => CORE_PATH . 'Cache/Driver/File'.EXT,
'Think\Storage' => CORE_PATH . 'Storage'.EXT,
),
// 函数和类文件
'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 . 'ParseTemplateBehavior'.EXT,
BEHAVIOR_PATH . 'ContentReplaceBehavior'.EXT,
),
// 行为扩展定义
'tags' => array(
'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', // 写入静态缓存
),
),
);