###### TP執行流程詳解
#### TP執行流程
我查看了TP的核心源碼,下面是我對TP執行的一些理解(從入口開始,只是一個大概流程):
1. 入口文件:
單入口文件,里面包含TP的入口文件,``require './ThinkPHP/ThinkPHP.php';
有多個模塊的話也可以定義多個入口,(比如對于后臺模塊,再新建一個admin.php)
2.TP入口文件ThinkPHP.php
1. 記錄運行時間(鉤子),用于輸出日志和調試,個人認為沒什么用.........
2. 定義系統常量:URL模式、類文件后綴、當前文件目錄、系統運行目錄、是否調試模式、緩存目錄、模版目錄、配置文件目錄....等等,然后引入核心Think類``Think.class.php`` ,引入后執行這個類中的start函數
3.Think.class.php類以及start函數
1.在start函數中,先定義注冊函數,然后定義錯誤和異常處理函數(spl_autoload_register用于自動加載未加載的類,register_shutdown_function定義PHP程序執行完成后執行的函數,set_exception_handler是自定義異常處理函數,這三個函數的參數都是一個方法名,當自動加載、執行完成、出現異常的時候,將用這里面傳的方法參數代替php原本的處理機制,比如 set_exception_handler('Think\Think::appException'); 出現異常的時候會調用appException函數,而不是PHP原生的異常處理函數)
2.加載各種文件:核心文件、配置文件、模式別名定義、模式行為定義等
3.設置系統時區
4.調用App類中的run方法
5.這個類中的其他函數就是在第一步中說到的自定義加載、處理函數,(自定義加載中用到了類名映射,就是從當前url中解析出模塊名、控制器名、方法名,)
4.App類以及run函數
1.run函數中先執行監聽(鉤子類中的)函數監聽init方法
2.執行init方法(加載動態配置、安全過濾等);
3.再執行鉤子類監聽函數,監聽begin方法,設置session,獲得到應用執行時間
4.執行exec函數(去尋找從url中解析出的類,并將其實例化后調用方法,輸出結果)
5.執行監聽函數監聽end函數(應用結束);
這樣整個執行流程就完畢了 ,我看了好幾天...挺難懂的,而且我覺得TP中要動態加載的類太多了,對于中小型網站來說,用不上,反而影響運行速度,然后我把這個執行流程里面比較重要的部分挑出來,寫進了我的框架中,里面的大部分函數名與TP相同,但是完全是我自己用代碼實現的,并沒有用TP的思路。下一章會詳細講解我自己理解的MVC框架及思路。