ThinkPHP核心架構實現

來源:互聯網
上載者:User

標籤:php   常用   函數熟悉   

之前和朋友一塊學過夠語言,作為系統層級的語言,沒有一定的功力和系統編程 經驗,很難快速的搭建起來可堪來用的代碼塊


剛好在公司在用ThinkPHp,這個架構還算是友好,比較靈活。加上PHP的很多函數感覺沒怎麼用過,正好看看如何利用一些函數搭建起來一套系統。雖然跟著老師創業的時候寫了一段時間原生PHP


直接進入代碼:

再次學習TP使用者URL請求調用應用入口檔案載入架構入口檔案*******THINKPHP.php記錄初始化已耗用時間和記憶體開銷系統常量判斷和定義載入架構引導類*******Think/Think執行Think::start 方法進行應用初始化設定錯誤處理機制和自動載入機制調用Think/Storage類進行儲存初始化*******STORAGE_TYPE常量定義儲存類型部署模式下*******如果存在應用編譯快取檔案*******則直接載入(直接到達22)讀取應用模式*******APP_MODE常量*******的定義檔案載入當前應用模式定義的核心檔案*******ThinkPHP/Mode/common.php載入慣例設定檔*******ThinkPHP/Conf/convention.php載入應用設定檔*******Application/Common/Conf/config.php載入系統別名定義判斷並且讀取應用別名定義檔案Application/Common/Conf/alias.php載入系統行為定義判斷並且讀取應用行為定義檔案Application/Common/Conf/tags.php載入架構底層語言套件ThinkPHP/lang/zh-cn.php如果是部署模式則產生應用編譯快取檔案載入偵錯模式設定檔ThinkPhP/Conf/debug.php判斷並且讀取應用的調試設定檔Application/Common/Conf/debug.php這是第22步判斷應用狀態並且讀取狀態設定檔*******APP_STATUS不為空白檢測應用目錄結構並且自動產生*******CHECK_APP_DIR配置開啟並且RUNTIME——PATH目錄不存在調用THINK/App類的run方法啟動應用應用初始化*******APP_INIT*******標籤位監聽並且執行綁定行為判斷並且載入動態配置和函數檔案調用Think/Dispatcher::dispatch方法進行URL請求調整自動識別相容URL 模式和命令列模式下的$_SERVER[‘PATH_INFO‘]參數檢測網域名稱部署以及完成模組和控制器的綁定操作*******APP_SUB_DOMAIN_DEPLOY參數開啟分析 URL地址中的PATH_INFO資訊擷取請求的模組資訊檢測模組是否存在和允許訪問判斷並且載入模組檔案、別名定義、行為定義以及函數檔案判斷並且載入模組的動態配置和函數檔案模組的URL模式判斷模組的路由檢測*******URL_ROUTE_ON開啟PATH_INFO處理標籤位偵聽並且執行綁定行為URL尾碼檢測*******URL_DENY_SUFFIX以及URL_HTML_SUFFIX處理擷取當前控制器和操作以及URL其他參數URL請求調度額按成*******URL_DISPATCH*******標籤位偵聽並且執行綁定行為應用開始*******APP_BEGIN*******標籤位偵聽並且執行綁定行為調用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標籤位偵聽並且執行綁定行為應用結束*******app_end*******標籤位偵聽並且執行綁定行為執行系統的ShowPageTrace行為日誌資訊儲存寫入

這是一整個流程,也算是一個思路(一般整體熟悉下來,三天內邊工作邊看足夠了,一個很基礎但是很有學習的思路)


系統的靈活性在於鉤子的使用,分布廣泛的標籤。

MVC三部分以及應用,路由,URL解析,都有標籤位進行偵聽。所有的系統實現方法,都可以引進去第三方,就直接修改鉤子的執行邏輯


印象中用的最多的幾個PHP內建函數

is_file,isset,empty,is_dir,is_array

strtolower,strtoupper

strpos,str_replace,preg_match

explode,implode

substr(A,-strlen(B))

var_export,realpath

define,defined

class_exists,method_exists

call_user_func

array_slice,array_shift,array_pop,array_merge,array_search

array_slice(explode(‘.‘,$_SERVER[‘HTTP_HOST‘]),0,-3);

ob_start() ob_end_clean(),ob_get_client()

array_walk_recursive

ReflectionException這個類

parse_str,pathinfo,strip_tags,dirname

trim,ucfirst

preg_replace_callback(‘/(\w+)\/([^\/]+)/‘, function($match) use($var){

$var[$match[1]]=strip_tags($match[2]);

}, implode(‘/‘,$paths));


應該就這麼多30多個,足夠撐起來一個系統,之間的邏輯組合還是有很強的邏輯性


還是那句話,當我們心中有了大廈的樣子,自然就可以建造起來一棟樓。用到的函數雖然不多,但是足夠了。這也許就是一種魅力吧。go語言寫出來的系統服務也許是一樣的,awk&sed寫出來的指令碼也是如此吧,Python和perl和php在處理文本資料上的感覺也是如此吧。更多的語言,一樣的道理


對於程式員方便的架構等,一定是以效能,效率,空間為代價的。單線程也許更加適合馮諾依曼的電腦結構。什麼時候電腦結構發生新的設計思路,也許會突破現有的一些效能瓶頸。

本文出自 “一站式解決方案” 部落格,請務必保留此出處http://10725691.blog.51cto.com/10715691/1962017

ThinkPHP核心架構實現

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.