/** * 應用程序初始化 * @access public * @return void */ static public function start() { // 設定錯誤和異常處理 register_shutdown_function(array('Think','fatalError')); set_error_handler(array('Think','appError')); set_exception_handler(array('Think','appException')); // 註冊AUTOLOAD方法 spl_autoload_register(array('Think', 'autoload')); //[RUNTIME] Think::buildApp(); // 預編譯項目 //[/RUNTIME] // 運行應用 App::run(); return ; } /** * 讀取配置信息 編譯項目 * @access private * @return string */ static private function buildApp() { // 讀取運行模式 if(defined('MODE_NAME')) { // 讀取模式的設置 $mode = include MODE_PATH.strtolower(MODE_NAME).'.php'; }else{ $mode = array(); } // 加載核心慣例配置文件 C(include THINK_PATH.'Conf/convention.php'); if(isset($mode['config'])) {// 加載模式配置文件 C( is_array($mode['config'])?$mode['config']:include $mode['config'] ); } // 加載項目配置文件 if(is_file(CONF_PATH.'config.php')) C(include CONF_PATH.'config.php'); // 加載框架底層語言包 L(include THINK_PATH.'Lang/'.strtolower(C('DEFAULT_LANG')).'.php'); // 加載模式系統行爲定義 if(C('APP_TAGS_ON')) { if(isset($mode['extends'])) { C('extends',is_array($mode['extends'])?$mode['extends']:include $mode['extends']); }else{ // 默認加載系統行爲擴展定義 C('extends', include THINK_PATH.'Conf/tags.php'); } } // 加載應用行爲定義 if(isset($mode['tags'])) { C('tags', is_array($mode['tags'])?$mode['tags']:include $mode['tags']); }elseif(is_file(CONF_PATH.'tags.php')){ // 默認加載項目配置目錄的tags文件定義 C('tags', include CONF_PATH.'tags.php'); } $compile = ''; // 讀取核心編譯文件列表 if(isset($mode['core'])) { $list = $mode['core']; }else{ $list = array( THINK_PATH.'Common/functions.php', // 標準模式函數庫 CORE_PATH.'Core/Log.class.php', // 日誌處理類 CORE_PATH.'Core/Dispatcher.class.php', // URL調度類 CORE_PATH.'Core/App.class.php', // 應用程序類 CORE_PATH.'Core/Action.class.php', // 控制器類 CORE_PATH.'Core/View.class.php', // 視圖類 ); } // 項目追加核心編譯列表文件 if(is_file(CONF_PATH.'core.php')) { $list = array_merge($list,include CONF_PATH.'core.php'); } foreach ($list as $file){ if(is_file($file)) { require_cache($file); if(!APP_DEBUG) $compile .= compile($file); } } // 加載項目公共文件 if(is_file(COMMON_PATH.'common.php')) { include COMMON_PATH.'common.php'; // 編譯文件 if(!APP_DEBUG) $compile .= compile(COMMON_PATH.'common.php'); } // 加載模式別名定義 if(isset($mode['alias'])) { $alias = is_array($mode['alias'])?$mode['alias']:include $mode['alias']; alias_import($alias); if(!APP_DEBUG) $compile .= 'alias_import('.var_export($alias,true).');'; } // 加載項目別名定義 if(is_file(CONF_PATH.'alias.php')){ $alias = include CONF_PATH.'alias.php'; alias_import($alias); if(!APP_DEBUG) $compile .= 'alias_import('.var_export($alias,true).');'; } if(APP_DEBUG) { // 調試模式加載系統默認的配置文件 C(include THINK_PATH.'Conf/debug.php'); // 讀取調試模式的應用狀態 $status = C('APP_STATUS'); // 加載對應的項目配置文件 if(is_file(CONF_PATH.$status.'.php')) // 容許項目增長開發模式配置定義 C(include CONF_PATH.$status.'.php'); }else{ // 部署模式下面生成編譯文件 build_runtime_cache($compile); } return ; }