源碼閱讀-ThinkPHP-5-運(yùn)行應(yīng)用

運(yùn)行應(yīng)用主要涉及到 3 個步驟:

  1. 定義了些關(guān)于請求的常量

  2. URL 調(diào)度

  3. 執(zhí)行應(yīng)用

下面分別來看這 3 個部分验毡。

定義請求常量

上回書說道逃延,應(yīng)用初始化的最后調(diào)用了App::start(),即App.class.php的靜態(tài)方法start羡儿。

那么久看看這個方法中執(zhí)行了些什么?

主要下面兩句代碼:

App::init();
App::exec();

我們先來看看第init中執(zhí)行了些什么:

define('REQUEST_METHOD',...);
define('IS_GET',...);
define('IS_POST',...);
define('IS_PUT',...);
define('IS_DELETE',...);
define('IS_AJAX',...);

正如你所見,定義了這些請求的布爾值常量训措。

另外,調(diào)用了Dispatcher::dispatch();,實(shí)現(xiàn)了 URL 調(diào)度光羞。我們接下來分析:

URL 調(diào)度

接下來绩鸣,來看看Dispatchaer.class.php,這個類實(shí)現(xiàn)了 URL 的解析、路由和調(diào)度纱兑。

先看dispatch這個方法呀闻。

獲取與路徑相關(guān)的常量

首先獲取配置中的常量,這些常量定義在convention.php中潜慎。

$varPath        =   C('VAR_PATHINFO');
$varAddon       =   C('VAR_ADDON');
$varModule      =  C('VAR_MODULE');
$varController  = C('VAR_CONTROLLER');
$varAction      =   C('VAR_ACTION');
$urlCase =  C('URL_CASE_INSENSITIVE');

例如$varModule默認(rèn)為m,$varAddon默認(rèn)為a,$varController默認(rèn)為c捡多。這些對應(yīng)的是路徑中路由參數(shù),例如:

http://www.abc.com?m=user&c=user&a=login

是否在兼容模式或 CLI 模式下

是否開啟子域名部署

分析PATHINFO信息

執(zhí)行應(yīng)用

前置/后置操作的實(shí)現(xiàn)

查看如下代碼(位于App.class.php大概126行前后):

if($class->hasMethod('_before_'.$action)) {
    $before =   $class->getMethod('_before_'.$action);
    if($before->isPublic()) {
        $before->invoke($module);
    }
}

判斷是否擁有前置方法,例如_before_index()铐炫。
如果有垒手,利用getMethod返回這個類方法的 ReflectionMethod 。接著判斷是否公開倒信,然后反射執(zhí)行科贬。

之后執(zhí)行控制器方法:

$method->invoke($module);

后置操作同理,在執(zhí)行控制器方法之后。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鳖悠,一起剝皮案震驚了整個濱河市榜掌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乘综,老刑警劉巖憎账,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瘾带,居然都是意外死亡鼠哥,警方通過查閱死者的電腦和手機(jī)熟菲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來朴恳,“玉大人抄罕,你說我怎么就攤上這事∮谟保” “怎么了呆贿?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長森渐。 經(jīng)常有香客問我做入,道長,這世上最難降的妖魔是什么同衣? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任竟块,我火速辦了婚禮,結(jié)果婚禮上耐齐,老公的妹妹穿的比我還像新娘浪秘。我一直安慰自己,他們只是感情好埠况,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布耸携。 她就那樣靜靜地躺著,像睡著了一般辕翰。 火紅的嫁衣襯著肌膚如雪夺衍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天喜命,我揣著相機(jī)與錄音沟沙,去河邊找鬼。 笑死壁榕,一個胖子當(dāng)著我的面吹牛尝胆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播护桦,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼煎娇!你這毒婦竟也來了二庵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤缓呛,失蹤者是張志新(化名)和其女友劉穎催享,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哟绊,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡因妙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片攀涵。...
    茶點(diǎn)故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡铣耘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出以故,到底是詐尸還是另有隱情蜗细,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布怒详,位于F島的核電站炉媒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏昆烁。R本人自食惡果不足惜吊骤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望静尼。 院中可真熱鬧白粉,春花似錦、人聲如沸茅郎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽系冗。三九已至奕扣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掌敬,已是汗流浹背惯豆。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奔害,地道東北人楷兽。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像华临,于是被迫代替她去往敵國和親芯杀。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理雅潭,服務(wù)發(fā)現(xiàn)揭厚,斷路器,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • 可以查看我做的簡易流程圖扶供。 也可以看官方的標(biāo)準(zhǔn)答案筛圆。 用戶URL請求 調(diào)用應(yīng)用入口文件(通常是網(wǎng)站的index.p...
    蘇近之2017閱讀 784評論 0 3
  • 一、在后臺工作量少 當(dāng)用戶沒有主動使用你的應(yīng)用程序時椿浓,系統(tǒng)會將其轉(zhuǎn)換為背景狀態(tài)太援。該系統(tǒng)最終可能會暫停您的應(yīng)用程序闽晦,...
    弗利撒閱讀 820評論 1 0
  • 史上最全的iOS面試題及答案 iOS面試小貼士———————————————回答好下面的足夠了----------...
    Style_偉閱讀 2,354評論 0 35
  • 那是一朵帶刺的野花 在鮮活的心頭 扎出滲血的孔 我看著它慢慢刺破 強(qiáng)忍著的劇痛 終于 花被染得通紅 那里肆虐著佞笑
    王不煩閱讀 90評論 0 1