php單一入口和多入口模式詳細講解

原文出處:http://www.smsyun.com/home-index-page-id-220.html

php單一入口模式可謂是現在一種比較流行的大型web應用開發模式,比如當前比較流行的一些php開發框架,zend,thinkphp,qeephp,還有cakephp 等他們都是采用的單一入口模式的。本文將就什么是單一入口模式,單一入口模式有哪些優點以缺點做一下研究。

什么是單一入口?

在解釋什么是單一入口之前,先說說與之對應的多入口。多入口即通過訪問不同的 php 文件運行對應的功能。比如剛開始學習 php 的時候,我們做一個項目通常都會如下這樣做:

index.php - 網站首頁

list.php?page=5 - 內容列表頁

info.php?id=12 - 內容詳細頁

login.php - 用戶登錄頁

對于這個項目來說,這其實就是一個多入口。

那么單一入口的應用程序就是說用一個文件處理所有的HTTP請求,例如不管是內容列表頁,用戶登錄頁還是內容詳細頁,都是通過從瀏覽器訪問 index.php 文件來進行處理的,這里這個 index.php 文件就是這個應用程序的單一入口。

php 是如何實現單一入口的呢?

很簡單,一般單一入口程序都是在訪問index.php時附帶一個特定的參數。例如:index.php?action=list就可以定義為訪問內容列表頁,而index.php?action=info 則可以定義為訪問內容詳細頁等,具體實現代碼如下:

$action=$_GET['action']==''?'index':$_GET['action'];//從url中取出action參數,如果沒有提供action參數,就設置一個默認的'index'作為參數
include('files/'.$action.'.php');//根據$action參數調用不同的代碼文件,從而滿足單一入口實現對應的不同的功能

以上這個就實現了一個最簡單的單一入口模式程序,當然真正的單一入口模式會比這個要復雜很多。但只要懂得如何合理組織各個功能的處理代碼并遵循一定的步驟,也可以輕松的解決掉這個難題,下面就一個后臺的例子來做一下說明:

比如我們現在要做一個新聞管理的后臺。那么首先,對于應用程序的功能要做出一個合理的分解。例如后臺的新聞欄目可能包含“添加新聞”、“編輯新聞”、“刪除新聞”等多個功能。這時我們就可以將這一組邏輯上關聯的功能組合到一個功能模塊中,稱為“新聞管理”模塊。
按照上面的方法整理完應用程序的功能,我們就會得到多個功能模塊,而每個模塊又是由多個功能組成(實際上,即便不是單一入口應用程序,功能的整理也是必須的步驟)。

整理完功能后,我們就需要確定如何存放各個功能的代碼。這里我推薦兩種方式:

1、每個功能模塊一個子目錄,目錄里的每一個文件就是一個功能的實現代碼。

這種方式的好處是每個功能的代碼都互相隔離,非常便于多人協作。缺點是每個功能之間共享代碼和數據不那么方便。例如新聞管理模塊中的所有功能都需要一個“取出新聞欄目記錄”的功能,那么采用這種多個獨立文件的組織方式,“取出新聞欄目記錄”就只能寫在另一個文件中,然后由需要該功能的文件include 進去。

2、每個模塊一個文件,模塊中的每個功能寫成一個函數或者一個類方法。

好處不用多說了,非常便于共享代碼和數據。缺點就是如果幾個人同時改,容易發生沖突。不過借助版本控制軟件和差異比較合并工具,沖突還是很容易解決的。

單一入口應用程序對應多入口有哪些優勢呢?

單一入口應用程序的所有http請求都是通過index.php接收并轉發到功能代碼中去的,所以在index.php里面就能完成許多實際工作(所有頁面都需要做的且都一樣的工作)。比如進行集中的安全性檢查,訪問統計等等,如果不是單一入口,那么開發者就必須記得在每一個文件的開始加上安全性檢查代碼,當然,你也許會說,多入口的安全性檢查可以寫到另一個文件中,然后include一下就可以了。但實際針對一個相對較大型一點的應用項目,在幾十個文件中保持頭部的幾個include都一致可不是一件讓人省心的事。

與安全性檢查類似。在入口里,我們還可以對url參數和post進行必要的檢查和特殊字符過濾、記錄日志、訪問統計等等各種可以集中處理的任務。這樣就可以看出,由于這些工作都被集中到了index.php來完成,可以減輕我們維護其他功能代碼的難度。

單一入口應用程序的缺點?

任何事情都有兩面性,單一入口應用程序也不例外。由于所有http請求都是訪問 index.php ,所以程序的 url 看起來不那么美觀,特別是對搜索引擎來說不太友好。比如下面這個 url:

http://www.smsyun.com/index.php?m=posts&a=index

我們知道這種URl不太方便記憶,而且搜索引擎不認它是一個正常的 URL,當然是相比下面這種 URl 來說的:

http://www.smsyun.com/index.php/posts/index/

不過這個也不是什么大問題,可以采用url重寫、PATHINFO等方式就可以輕松解決這個問題。

OK,單一入口模式就寫這么多了,當然要想深刻理解單一模式,最好的辦法還是自己嘗試著用單一入口模式寫一個小應用出來深刻體會一下。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,637評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,555評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,900評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,629評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,976評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評論 3 448
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,139評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,686評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,411評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,641評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,820評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,233評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,567評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,362評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,604評論 2 380

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,828評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,757評論 25 708
  • 轉載自cr180大神DiscuzX2.5完整目錄結構【source程序文件庫】 /source/admincp后臺...
    cndaqiang閱讀 877評論 1 2
  • 我總是伏案打字。 偶爾抬頭 歪歪頭, 才能看到你。 你一動不動, 悄然發了新芽。 從去年四月到今年三月, 我見證了...
    葉浟閱讀 597評論 0 4
  • 解決方式: 在build.gradle (app) 的 android{}里面添加 reference 可能需要...
    rivc閱讀 358評論 0 0