<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] * * * * * ## 1 應用啟動源代碼(/thinkphp/library/think/App的run()) 注:App.php其他部分源代碼分析見[附:應用啟動文件](http://www.hmoore.net/zmwtp/tp5/119429) ~~~ class App { public static function run() { self::initModule(COMMON_MODULE, Config::get()); $config = Config::get(); if (!empty($config['root_namespace'])) { Loader::addNamespace($config['root_namespace']); } if (!empty($config['extra_file_list'])) { foreach ($config['extra_file_list'] as $file) { $file = strpos($file, '.') ? $file : APP_PATH . $file . EXT; if (is_file($file)) { include_once $file; } } } date_default_timezone_set($config['default_timezone']); APP_HOOK && Hook::listen('app_init'); if ($config['lang_switch_on']) { defined('LANG_SET') or define('LANG_SET', Lang::range()); Lang::load(THINK_PATH . 'lang' . DS . LANG_SET . EXT); if (!APP_MULTI_MODULE) { Lang::load(APP_PATH . 'lang' . DS . LANG_SET . EXT); } } if (empty(self::$dispatch['type'])) { self::route($config); } APP_DEBUG && Log::record('[ ROUTE ] ' . var_export(self::$dispatch, true), 'info'); APP_HOOK && Hook::listen('app_begin'); switch (self::$dispatch['type']) { case 'redirect': header('Location: ' . self::$dispatch['url'], true, self::$dispatch['status']); break; case 'module': $data = self::module(self::$dispatch['module'], $config); break; case 'controller': $data = Loader::action(self::$dispatch['controller'], self::$dispatch['params']); break; case 'method': $data = self::invokeMethod(self::$dispatch['method'], self::$dispatch['params']); break; case 'function': $data = self::invokeFunction(self::$dispatch['function'], self::$dispatch['params']); break; default: throw new Exception('dispatch type not support', 10008); } APP_HOOK && Hook::listen('app_end', $data); return Response::send($data, Response::type(), Config::get('response_return')); } } ~~~ ## 2 應用啟動App::run()源代碼分析 ### 1 應用初始化 ~~~ self::initModule(COMMON_MODULE,Config::get()) ~~~ >[info] 應用的模塊初始化 具體的實現見框架流程的[附:應用啟動文件](http://www.hmoore.net/zmwtp/tp5/119429) ~~~ $config = Config::get() ~~~ >[info] 全局配置參數獲取 **下面根據配置參數注冊根命名空間,加載額外配置文件,設置系統時區** 具體實現見框架流程的[附:全局配置文件](http://www.hmoore.net/zmwtp/tp5/119434) ~~~ if (!empty($config['root_namespace'])) { Loader::addNamespace($config['root_namespace']); } ~~~ >[info] 注冊根命名空間 具體實現見框架流程的[附:自動加載器](http://www.hmoore.net/zmwtp/tp5/119431) ~~~ if (!empty($config['extra_file_list'])) { foreach ($config['extra_file_list'] as $file) { $file = strpos($file, '.') ? $file : APP_PATH . $file . EXT; if (is_file($file)) { include_once $file; } } } ~~~ >[info] 加載配置的額外文件 ~~~ date_default_timezone_set($config['default_timezone']); ~~~ >[info] 設置系統時區 系統時區見基礎原理的[php系統時區](http://www.hmoore.net/zmwtp/tp5/119448) ~~~ APP_HOOK && Hook::listen('app_init'); ~~~ >[info] 應用初始化回調處理 監聽回調見框架流程的[附:監聽回調注冊文件](http://www.hmoore.net/zmwtp/tp5/119435) ### 2 Url路由解析,并設置調度類型 ~~~ if (empty(self::$dispatch['type'])) { self::route($config); } ~~~ >[info] 解析url 調用self::route(),解析url,生成$dispatch。 路由分析見框架流程的[附:全局路由文件](http://www.hmoore.net/zmwtp/tp5/119438) ~~~ APP_DEBUG && Log::record('[ ROUTE ] ' . var_export(self::$dispatch, true), 'info'); ~~~ >[info] 日志記錄路由分析信息 日志記錄的實現見框架流程的[附:日志記錄文件](http://www.hmoore.net/zmwtp/tp5/119437) ~~~ APP_HOOK && Hook::listen('app_begin'); ~~~ >[info] 同上 應用啟動回調處理 * * * * * ### 3 應用調度 ~~~ switch (self::$dispatch['type']) { case 'redirect': header('Location: ' . self::$dispatch['url'], true, self::$dispatch['status']); break; case 'module': $data = self::module(self::$dispatch['module'], $config); break; case 'controller': $data = Loader::action(self::$dispatch['controller'], self::$dispatch['params']); break; case 'method': $data = self::invokeMethod(self::$dispatch['method'], self::$dispatch['params']); break; case 'function': $data = self::invokeFunction(self::$dispatch['function'], self::$dispatch['params']); break; default: throw new Exception('dispatch type not support', 10008); } ~~~ 根據調度器類型self::$dispatch['type']進行不同的應用的調度。 將應用業務執行的結果保存到$data中 **應用的調度是應用啟動的核心部分。** 其內容見框架流程的[應用調度分析](http://www.hmoore.net/zmwtp/tp5/119428) ~~~ APP_HOOK && Hook::listen('app_end', $data); ~~~ 同上 應用完成回調處理 ### 4 輸出數據到客戶端 ~~~ return Response::send($data, Response::type(), Config::get('response_return')); ~~~ 調用Response::send()返回數據到客戶端 輸出的原理見框架流程的[附:數據輸出文件,](http://www.hmoore.net/zmwtp/tp5/119439) ## 3 總結 應用啟動App::run()是框架核心。 首先 根據配置初始化應用的公共模塊 然后 根據配置參數依次配注冊根命名空間 加載額外文件 設置系統時區, 此時調用監聽app_init事件的回調方法 然后 開啟多語言機制 接著 對url進行路由分析,獲取url可以使用的調度類型 最后 根據調度類型,分別調用應用的對應邏輯業務實現。 **這里的路由分析和應用調度是框架從框架底層到應用跳轉的核心部分,** 因此單獨拿出[一節](http://www.hmoore.net/zmwtp/tp5/119428)來進行分析。 路由分析中涉及路由規則的定義,使用方法見使用范例的[路由規則注冊](http://www.hmoore.net/zmwtp/tp5/120040) 調度類型可以靈活定義業務應用的組織方式,使用方法見使用范例的 [多種應用組織](http://www.hmoore.net/zmwtp/tp5/120210)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看