thinkphp 深刻源碼一

  /**
     * 應用程序初始化
     * @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 ;
    }
相關文章
相關標籤/搜索