php index.php 文件路径,自研 PHP 框架 1.0_index.php 文件说明
index.php說(shuō)明
在服務(wù)上,PHP 引擎其實(shí)只執(zhí)行了 index.php 這一個(gè)文件,index.php 可以抽象的看做是產(chǎn)品的最終型態(tài),app 下的文件規(guī)定如何組裝,system 下的文件提供基本的“組裝零件”,最后拼裝成一個(gè)完整的產(chǎn)品,這就是 index.php。
下面參考 index.php 中的具體實(shí)現(xiàn)來(lái)一一說(shuō)明:
// 引入路由解析文件
include('./system/url.php');
// 引入常量定義文件
include('./system/constant.php');
// 引入框架函數(shù)庫(kù)
include('./system/function.php');
// 解析數(shù)組拿到路徑
url::analyse($_SERVER);
$obj = new url();
// 加載指定文件
include(APP.$obj->get('path').EXT);
$class_name = $obj->get('controller');
$func = $obj->get('func');
$app = new $class_name();
$app->$func();
在設(shè)計(jì)過(guò)程中,最初的劃分其實(shí)是這樣的:
1.框架環(huán)境載入
2.框架功能執(zhí)行
3.應(yīng)用功能執(zhí)行
抽象的看,index.php 由如上的幾個(gè)部分構(gòu)成,按照規(guī)劃,進(jìn)一步細(xì)分就有了最上面的具體實(shí)現(xiàn)。
文件引入
需要說(shuō)明,文件的引入順序并不重要,這些只是準(zhǔn)備工作,誰(shuí)前誰(shuí)后,并沒(méi)有什么區(qū)別。
要使用工具前必須要先準(zhǔn)備工具。前面所說(shuō)的文件引入順序并不重要,強(qiáng)調(diào)的是所有引入文件之間的順序并沒(méi)有關(guān)聯(lián)關(guān)系。但是,引入文件必須要在具體的執(zhí)行邏輯之前,比如,下面這種寫(xiě)法就是錯(cuò)誤的
// 解析數(shù)組拿到路徑
url::analyse($_SERVER);
// 引入路由解析文件
include('./system/url.php');
// 引入常量定義文件
include('./system/constant.php');
// 引入框架函數(shù)庫(kù)
include('./system/function.php');
錯(cuò)誤的原因在于,使用了還沒(méi)有引入的功能組件,url::analyse($_SERVER) 執(zhí)行時(shí),url 類(lèi)還不存在。理解這一點(diǎn),需要一些更基礎(chǔ)的知識(shí)。
計(jì)算機(jī)如何運(yùn)行
眾所周知,計(jì)算機(jī)的核心是 CPU(此處僅用來(lái)進(jìn)行簡(jiǎn)略的說(shuō)明,不需要的內(nèi)容都被省略,更詳盡的基礎(chǔ)知識(shí)請(qǐng)參考其他權(quán)威資料)。
CPU 只能做以下簡(jiǎn)單的事情:
從寄存器讀取數(shù)據(jù);
計(jì)算;
將結(jié)果寫(xiě)入寄存器。
一個(gè)腳本在被載入內(nèi)存(內(nèi)存是一種特殊的寄存器)之后,CPU 會(huì)從頭開(kāi)始一條一條讀取腳本并執(zhí)行,CPU 只能夠識(shí)別機(jī)器碼(0100101111001....00011001,類(lèi)似這樣的由 0 和 1 組成的長(zhǎng)串),所以 index.php 在執(zhí)行之前先要進(jìn)行翻譯,編譯成 CPU 能夠識(shí)別的機(jī)器碼,編譯過(guò)程也是一一對(duì)應(yīng),并不會(huì)打亂順序,編譯之后的機(jī)器碼可能是這樣
0100 1110
0011 1011
...
0010 0001
1111 1111
...
腳本(index.php)的一行可能對(duì)應(yīng)機(jī)器碼中的一行或者多行。
進(jìn)程(簡(jiǎn)單的理解,執(zhí)行的一個(gè)程序)在執(zhí)行前會(huì)被分配一片內(nèi)存空間,用于存儲(chǔ)代碼、數(shù)據(jù)和臨時(shí)變量。
如果 url::analyse($_SERVER) 在引入文件之前被執(zhí)行,CPU 會(huì)在線程的內(nèi)存空間中索引對(duì)應(yīng)的類(lèi),而載入的動(dòng)作在后面,顯然是索引不到的,這樣就會(huì)拋出一個(gè)錯(cuò)誤。
這就是前面所說(shuō)的,工具必須在使用之前就準(zhǔn)備好,執(zhí)行邏輯和載入文件之間具有同步(可以理解為具有先后順序要求)關(guān)系。
框架功能執(zhí)行
具體指
// 解析數(shù)組拿到路徑
url::analyse($_SERVER);
$obj = new url();
// 加載指定文件
include(APP.$obj->get('path').EXT);
$class_name = $obj->get('controller');
$func = $obj->get('func');
這一段處理了這么幾個(gè)問(wèn)題:
解析請(qǐng)求,拿到目標(biāo)路由
加載目標(biāo)文件
獲取控制器,方法名
應(yīng)用功能執(zhí)行
具體指
$app = new $class_name();
$app->$func();
這是業(yè)務(wù)執(zhí)行的核心,雖然所有的請(qǐng)求利用的是同樣的邏輯,但是通過(guò)模塊,控制器和方法名參數(shù)的變化,就可以實(shí)現(xiàn)不同業(yè)務(wù)邏輯的加載,進(jìn)而實(shí)現(xiàn)不同的業(yè)務(wù)。
PS:本系列文章最佳閱讀方式,IDE+本地運(yùn)行環(huán)境,IDE中閱讀可配合 demo 運(yùn)行增進(jìn)理解,GitHub地址
本作品采用《CC 協(xié)議》,轉(zhuǎn)載必須注明作者和本文鏈接
城里的野山參
總結(jié)
以上是生活随笔為你收集整理的php index.php 文件路径,自研 PHP 框架 1.0_index.php 文件说明的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 认知无线电matlab代码详解,认知无线
- 下一篇: 传媒公司品牌广告语232个