之前和朋友一塊學(xué)過(guò)夠語(yǔ)言,作為系統(tǒng)級(jí)別的語(yǔ)言,沒(méi)有一定的功力和系統(tǒng)編程 經(jīng)驗(yàn),很難快速的搭建起來(lái)可堪來(lái)用的代碼塊
創(chuàng)新互聯(lián)建站提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì),成都品牌網(wǎng)站建設(shè),1元廣告等致力于企業(yè)網(wǎng)站建設(shè)與公司網(wǎng)站制作,十余年的網(wǎng)站開(kāi)發(fā)和建站經(jīng)驗(yàn),助力企業(yè)信息化建設(shè),成功案例突破上千余家,是您實(shí)現(xiàn)網(wǎng)站建設(shè)的好選擇.剛好在公司在用ThinkPHp,這個(gè)框架還算是友好,比較靈活。加上PHP的很多函數(shù)感覺(jué)沒(méi)怎么用過(guò),正好看看如何利用一些函數(shù)搭建起來(lái)一套系統(tǒng)。雖然跟著老師創(chuàng)業(yè)的時(shí)候?qū)懥艘欢螘r(shí)間原生PHP
直接進(jìn)入代碼:
再次學(xué)習(xí)TP 用戶URL請(qǐng)求 調(diào)用應(yīng)用入口文件 載入框架入口文件*******THINKPHP.php 記錄初始化運(yùn)行時(shí)間和內(nèi)存開(kāi)銷(xiāo) 系統(tǒng)常量判斷和定義 載入框架引導(dǎo)類*******Think/Think 執(zhí)行Think::start 方法進(jìn)行應(yīng)用初始化 設(shè)置錯(cuò)誤處理機(jī)制和自動(dòng)加載機(jī)制 調(diào)用Think/Storage類進(jìn)行存儲(chǔ)初始化*******STORAGE_TYPE常量定義存儲(chǔ)類型 部署模式下*******如果存在應(yīng)用編譯緩存文件*******則直接加載(直接到達(dá)22) 讀取應(yīng)用模式*******APP_MODE常量*******的定義文件 加載當(dāng)前應(yīng)用模式定義的核心文件*******ThinkPHP/Mode/common.php 加載慣例配置文件*******ThinkPHP/Conf/convention.php 加載應(yīng)用配置文件*******Application/Common/Conf/config.php 加載系統(tǒng)別名定義 判斷并且讀取應(yīng)用別名定義文件Application/Common/Conf/alias.php 加載系統(tǒng)行為定義 判斷并且讀取應(yīng)用行為定義文件Application/Common/Conf/tags.php 加載框架底層語(yǔ)言包ThinkPHP/lang/zh-cn.php 如果是部署模式則生成應(yīng)用編譯緩存文件 加載調(diào)試模式配置文件ThinkPhP/Conf/debug.php 判斷并且讀取應(yīng)用的調(diào)試配置文件Application/Common/Conf/debug.php 這是第22步 判斷應(yīng)用狀態(tài)并且讀取狀態(tài)配置文件*******APP_STATUS不為空 檢測(cè)應(yīng)用目錄結(jié)構(gòu)并且自動(dòng)生成*******CHECK_APP_DIR配置開(kāi)啟并且RUNTIME——PATH目錄不存在 調(diào)用THINK/App類的run方法啟動(dòng)應(yīng)用 應(yīng)用初始化*******APP_INIT*******標(biāo)簽位監(jiān)聽(tīng)并且執(zhí)行綁定行為 判斷并且加載動(dòng)態(tài)配置和函數(shù)文件 調(diào)用Think/Dispatcher::dispatch方法進(jìn)行URL請(qǐng)求調(diào)整 自動(dòng)識(shí)別兼容URL 模式和命令行模式下的$_SERVER['PATH_INFO']參數(shù) 檢測(cè)域名部署以及完成模塊和控制器的綁定操作*******APP_SUB_DOMAIN_DEPLOY參數(shù)開(kāi)啟 分析 URL地址中的PATH_INFO信息 獲取請(qǐng)求的模塊信息 檢測(cè)模塊是否存在和允許訪問(wèn) 判斷并且加載模塊文件、別名定義、行為定義以及函數(shù)文件 判斷并且加載模塊的動(dòng)態(tài)配置和函數(shù)文件 模塊的URL模式判斷 模塊的路由檢測(cè)*******URL_ROUTE_ON開(kāi)啟 PATH_INFO處理標(biāo)簽位偵聽(tīng)并且執(zhí)行綁定行為 URL后綴檢測(cè)*******URL_DENY_SUFFIX以及URL_HTML_SUFFIX處理 獲取當(dāng)前控制器和操作以及URL其他參數(shù) URL請(qǐng)求調(diào)度額按成*******URL_DISPATCH*******標(biāo)簽位偵聽(tīng)并且執(zhí)行綁定行為 應(yīng)用開(kāi)始*******APP_BEGIN*******標(biāo)簽位偵聽(tīng)并且執(zhí)行綁定行為 調(diào)用SESSION_OPTIONS配置參數(shù)進(jìn)行SESSION初始化(非命令行模式) 根據(jù)請(qǐng)求執(zhí)行控制器方法 如果控制器不存在則檢測(cè)空控制器是否存在 控制器開(kāi)始*******ACTION_BEGIN*******標(biāo)簽位偵聽(tīng)并且執(zhí)行綁定行為 默認(rèn)調(diào)用系統(tǒng)的ReadHtmlCache行為讀取靜態(tài)緩存*******HTML_CACHE_ON開(kāi)啟 判斷并且調(diào)用控制器的_initialize初始化方法 判斷操作方法是否存在,如果不存在就檢測(cè)是否定義空操作方法 判斷前置操作方法是否定義,有的話執(zhí)行 Action參數(shù)綁定檢測(cè),自動(dòng)匹配操作方法的參數(shù) 如果有模板渲染*******display 視圖開(kāi)始*******view_begin*******標(biāo)簽位偵聽(tīng)并且執(zhí)行綁定行為 調(diào)用Think/view的fetch方法解析并且獲取模板內(nèi)容 自動(dòng)識(shí)別當(dāng)前主題以及定位模板文件 視圖解析*******view_parse*******標(biāo)簽位偵聽(tīng)并且執(zhí)行綁定行為 默認(rèn)調(diào)用內(nèi)置ParseTemplate行為解析模板 模板引擎解析模板內(nèi)容生成模板緩存 模板過(guò)濾替換*******template_filter*******標(biāo)簽位偵聽(tīng)并且執(zhí)行綁定行為 默認(rèn)調(diào)用系統(tǒng)的ContentReplace行為進(jìn)行模板替換 輸出內(nèi)容過(guò)濾*******view_filter******* 調(diào)用默認(rèn)的WriteHtmlCache行為寫(xiě)入靜態(tài)緩存*******HTML_CACHE_ON開(kāi)啟 調(diào)用Think/View類的render方法渲染內(nèi)容 視圖結(jié)束*******view_end*******標(biāo)簽位偵聽(tīng)并且執(zhí)行綁定行為 判斷后置操作方法是否定義,有的話執(zhí)行 控制器結(jié)束action_end標(biāo)簽位偵聽(tīng)并且執(zhí)行綁定行為 應(yīng)用結(jié)束*******app_end*******標(biāo)簽位偵聽(tīng)并且執(zhí)行綁定行為 執(zhí)行系統(tǒng)的ShowPageTrace行為 日志信息存儲(chǔ)寫(xiě)入
這是一整個(gè)流程,也算是一個(gè)思路(一般整體熟悉下來(lái),三天內(nèi)邊工作邊看足夠了,一個(gè)很基礎(chǔ)但是很有學(xué)習(xí)的思路)
系統(tǒng)的靈活性在于鉤子的使用,分布廣泛的標(biāo)簽。
MVC三部分以及應(yīng)用,路由,URL解析,都有標(biāo)簽位進(jìn)行偵聽(tīng)。所有的系統(tǒng)實(shí)現(xiàn)方法,都可以引進(jìn)去第三方,就直接修改鉤子的執(zhí)行邏輯
印象中用的最多的幾個(gè)PHP內(nèi)置函數(shù)
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這個(gè)類
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));
應(yīng)該就這么多30多個(gè),足夠撐起來(lái)一個(gè)系統(tǒng),之間的邏輯組合還是有很強(qiáng)的邏輯性
還是那句話,當(dāng)我們心中有了大廈的樣子,自然就可以建造起來(lái)一棟樓。用到的函數(shù)雖然不多,但是足夠了。這也許就是一種魅力吧。go語(yǔ)言寫(xiě)出來(lái)的系統(tǒng)服務(wù)也許是一樣的,awk&sed寫(xiě)出來(lái)的腳本也是如此吧,Python和perl和php在處理文本數(shù)據(jù)上的感覺(jué)也是如此吧。更多的語(yǔ)言,一樣的道理
對(duì)于程序員方便的框架等,一定是以性能,效率,空間為代價(jià)的。單線程也許更加適合馮諾依曼的計(jì)算機(jī)結(jié)構(gòu)。什么時(shí)候計(jì)算機(jī)結(jié)構(gòu)發(fā)生新的設(shè)計(jì)思路,也許會(huì)突破現(xiàn)有的一些性能瓶頸。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。