/**
* 應用程式初始化
* @access public
* @return void
*/
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);
$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);
}
}
// 載入應用模式配置檔案
foreach ($mode['config'] as $key=>$file){
is_numeric($key)?C(load_config($file)):C($key,load_config($file));
}
// 讀取當前應用模式對應的配置檔案
if('common' != APP_MODE && is_file(CONF_PATH.'config_'.APP_MODE.CONF_EXT))
C(load_config(CONF_PATH.'config_'.APP_MODE.CONF_EXT));
// 載入模式別名定義
if(isset($mode['alias'])){
self::addMap(is_array($mode['alias'])?$mode['alias']:include $mode['alias']);
}
// 載入應用別名定義檔案
if(is_file(CONF_PATH.'alias.php'))
self::addMap(include CONF_PATH.'alias.php');
// 載入模式行為定義
if(isset($mode['tags'])) {
Hook::import(is_array($mode['tags'])?$mode['tags']:include $mode['tags']);
}
// 載入應用行為定義
if(is_file(CONF_PATH.'tags.php'))
// 允許應用增加開發模式配置定義
Hook::import(include CONF_PATH.'tags.php');
// 載入框架底層語言包
L(include THINK_PATH.'Lang/'.strtolower(C('DEFAULT_LANG')).'.php');
if(!APP_DEBUG){
$content .= "\nnamespace { Think\\Think::addMap(".var_export(self::$_map,true).");";
$content .= "\nL(".var_export(L(),true).");\nC(".var_export(C(),true).');Think\Hook::import('.var_export(Hook::get(),true).');}';
Storage::put($runtimefile,strip_whitespace('<?php '.$content));
}else{
// 除錯模式載入系統預設的配置檔案
C(include THINK_PATH.'Conf/debug.php');
// 讀取應用除錯配置檔案
if(is_file(CONF_PATH.'debug'.CONF_EXT))
C(include CONF_PATH.'debug'.CONF_EXT);
}
}
// 讀取當前應用狀態對應的配置檔案
if(APP_STATUS && is_file(CONF_PATH.APP_STATUS.CONF_EXT))
C(include CONF_PATH.APP_STATUS.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);
}
}
// 記錄載入檔案時間
G('loadTime');
// 執行應用
App::run();
}
複製程式碼
- 註冊autoload方法
- 設定錯誤和異常處理
- 初始化檔案儲存方式
- 初始化快取檔案。如果不是除錯模式,且快取檔案存在的話,就載入快取
- 否則,有快取的話,就刪除快取檔案。
- 引入Mode/common.php 裡面的core,如果對應的檔案存在的話,就引入檔案。如果不是除錯模式的話,content就等於編譯檔案。
// 函式和類檔案
'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,
),
複製程式碼
- 載入配置檔案
'config' => array(
THINK_PATH.'Conf/convention.php', // 系統慣例配置
CONF_PATH.'config'.CONF_EXT, // 應用公共配置
),
複製程式碼
- 如果APP_MODE不等於common的話,讀取當前應用模式對應的配置檔案
- 載入模式行為定義
- 載入應用行為定義
- 載入框架底層語言包
- 讀取當前應用狀態對應的配置檔案
- 設定系統時區
- 檢查應用目錄結構,如果不存在則自動建立
- 記錄載入檔案時間
- APP:run()