中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ThinkPHP核心框架實現

發布時間:2020-09-22 13:13:59 來源:網絡 閱讀:1720 作者:jackdongting 欄目:開發技術

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


剛好在公司在用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在處理文本數據上的感覺也是如此吧。更多的語言,一樣的道理


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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吉安县| 福建省| 寻乌县| 东阿县| 新田县| 万宁市| 武夷山市| 苏尼特右旗| 土默特左旗| 积石山| 伊宁县| 汝州市| 晋中市| 曲靖市| 黄山市| 金堂县| 呼和浩特市| 罗定市| 忻州市| 上蔡县| 湘潭县| 青海省| 柏乡县| 青阳县| 平潭县| 庄河市| 通榆县| 孟津县| 社旗县| 东阿县| 洪洞县| 景宁| 合江县| 宁津县| 清流县| 大田县| 米脂县| 莆田市| 丁青县| 晋江市| 治多县|