PHP 系統流程

2022-05-06 10:18:09 字數 3121 閱讀 3660

我們來系統的了解下thinkphp框架開發的應用的標準執行流程:

使用者url請求

呼叫應用入口檔案(通常是**的index.php)

載入框架入口檔案(thinkphp.php)

記錄初始執行時間和記憶體開銷

系統常量判斷及定義

載入框架引導類(think\think)並執行think::start方法進行應用初始化

設定錯誤處理機制和自動載入機制

呼叫think\storage類進行儲存初始化(由storage_type常量定義儲存型別)

部署模式下如果存在應用編譯快取檔案則直接載入(直接跳轉到步驟22)

載入當前應用模式定義的核心檔案(普通模式是thinkphp/mode/common.php)

載入慣例配置檔案(普通模式是thinkphp/conf/convention.php)

載入系統別名定義

載入系統行為定義

載入框架底層語言包(普通模式是thinkphp/lang/zh-cn.php)

如果是部署模式則生成應用編譯快取檔案

載入除錯模式系統配置檔案(thinkphp/conf/debug.php)

判斷並載入動態配置和函式檔案

呼叫think\dispatcher::dispatch方法進行url請求排程

自動識別相容url模式和命令列模式下面的$_server['path_info']引數

分析url位址中的path_info資訊

獲取請求的模組資訊

檢測模組是否存在和允許訪問

判斷並載入模組配置檔案、別名定義、行為定義及函式檔案

判斷並載入模組的動態配置和函式檔案

模組的url模式判斷

模組的路由檢測(url_router_on開啟)

path_info處理(path_info)標籤位偵聽並執行繫結行為

url字尾檢測(url_deny_suffix以及url_html_suffix處理)

獲取當前控制器和操作,以及url其他引數

url請求排程完成(url_dispatch)標籤位偵聽並執行繫結行為

呼叫session_options配置引數進行session初始化(如果不是命令列模式)

根據請求執行控制器方法

如果控制器不存在則檢測空控制器是否存在

控制器開始(action_begin)標籤位偵聽並執行繫結行為

預設呼叫系統的readhtmlcache行為讀取靜態快取(html_cache_on引數開啟)

判斷並呼叫控制器的_initialize初始化方法

判斷操作方法是否存在,如果不存在則檢測是否定義空操作方法

判斷前置操作方法是否定義,有的話執行

action引數繫結檢測,自動匹配操作方法的引數

如果有模版渲染(呼叫控制器display方法)

檢視開始(view_begin)標籤位偵聽並執行繫結行為

呼叫think\view的fetch方法解析並獲取模版內容

自動識別當前主題以及定位模版檔案

視**析(view_parse)標籤位偵聽並執行繫結行為

預設呼叫內建parsetemplate行為解析模版(普通模式下面)

模版引擎解析模版內容後生成模版快取

模版過濾替換(template_filter)標籤位偵聽並執行繫結行為

預設呼叫系統的contentreplace行為進行模版替換

輸出內容過濾(view_filter)標籤位偵聽並執行繫結行為

預設呼叫系統的writehtmlcache行為寫入靜態快取(html_cache_on引數開啟)

呼叫think\view類的render方法輸出渲染內容

檢視結束(view_end)標籤位偵聽並執行繫結行為

判斷後置操作方法是否定義,有的話執行

控制器結束(action_end)標籤位偵聽並執行繫結行為

執行系統的showpagetrace行為(show_page_trace引數開啟並且不是ajax請求)

日誌資訊儲存寫入

複製**

如果你繫結了更多的應用行為的話,流程可能會更加複雜。

如果是部署模式下面的第二次請求的話,上面的流程中的步驟10~21是可以省略的。

php 解析流程

我們都知道php指令碼的執行過程,先是由zend引擎將php原始碼編譯為opcode序列,再由zend vm去解釋執行。一般編譯的過程都是先進行詞法分析 語法分析,然後才是編譯。在經過語法分析之後,有乙個抽象語法樹 abstractsyntax tree或者縮寫為ast 的概念,他算是語法分析的產出...

php控制流程

一 php流程控制語句 流程控制對於任何一門語言來說,都是至關重要的,在編寫程式時,我們經常會希望為不同的決定執行不同的動作,這時就可以使用流程控制語句來實現 影響使用者的輸入為不同的決定或者輸入執行不同的程式 一 順序結構 順序結構是最基本的結構方式,各流程依次按順序執行 順序結構中,所有 都將執...

PHP順序流程

if語句 if 我是程式設計師 條件分支 首先設定我的技術全國排名第10 myrank 10 if myrank 10 if else語句 if 我是程式設計師 else 首先設定技術排名第10 myrank 10 if myrank 10 else elseif語句 原型 if 條件1 elsei...