解說PHP架構 (一) 基本概念
LAMP
LAMP是基於Linux,Apache,MySQL和PHP的開放資源網路開發平台。這個術語來自歐洲,在那裡這些程式常用來作為一種標準開發環境。名字來源於每個程式的第一個字母。每個程式在所有權裡都符合開放原始碼標準:Linux是開放系統;Apache是最通用的網路伺服器;MySQL是帶有基於網路管理附加工具的關聯式資料庫;PHP是流行的對象指令碼語言,它包含了多數其它語言的優秀特徵來使得它的網路開發更加有效。開發人員在Windows作業系統下使用這些Linux環境裡的工具稱為使用WAMP。
雖然這些開放原始碼程式本身並不是專門設計成同另外幾個程式一起工作的,但由於它們都是影響較大的開源軟體,擁有很多共同特點,這就導致了這些組件經常在一起使用。在過去的幾年裡,這些組件的相容性不斷完善,在一起的應用情形變得更加普遍。並且它們為了改善不同組件之間的協作,已經建立了某些擴充功能。目前,幾乎在所有的Linux發布版中都預設包含了這些產品。Linux作業系統、Apache伺服器、MySQL資料庫和Perl、PHP或者 Python語言,這些產品共同組成了一個強大的Web應用程式平台。
隨著開源潮流的蓬勃發展,開放原始碼的LAMP已經與J2EE和.Net商業軟體形成三足鼎立之勢,並且該軟體開發的項目在軟體方面的投資成本較低,因此受到整個IT界的關注。從網站的流量上來說,70%以上的訪問流量是LAMP來提供的,LAMP是最強大的網站解決方案.
OOP
物件導向編程(Object Oriented Programming,OOP,物件導向程式設計)是一種電腦編程架構。OOP 的一條基本原則是電腦程式是由單個能夠起到子程式作用的單元或對象組合而成。OOP
達到了軟體工程的三個主要目標:重用性、靈活性和擴充性。為了實現整體運算,每個對象都能夠接收資訊、處理資料和向其它對象發送資訊。OOP 主要有以下的概念和組件:
組件 - 資料和功能一起在運行著的電腦程式中形成的單元,組件在 OOP 電腦程式中是模組和結構化的基礎。
抽象性 - 程式有能力忽略正在處理中資訊的某些方面,即對資訊主要方面關注的能力。
封裝 - 也叫做資訊封裝:確保組件不會以不可預期的方式改變其它組件的內部狀態;只有在那些提供了內部狀態改變方法的組件中,才可以訪問其內部狀態。每類組件都提供了一個與其它組件聯絡的介面,並規定了其它組件進行調用的方法。
多態性 - 組件的引用和類集會涉及到其它許多不同類型的組件,而且引用組件所產生的結果得依據實際調用的類型。
繼承性 - 允許在現存的組件基礎上建立子類組件,這統一併增強了多態性和封裝性。典型地來說就是用類來對組件進行分組,而且還可以定義新類為現存的類的擴充,這樣就可以將類組織成樹形或網狀結構,這體現了動作的通用性。
由於抽象性、封裝性、重用性以及便於使用等方面的原因,以組件為基礎的編程在指令碼語言中已經變得特別流行。
MVC
MVC是一個設計模式,它強制性的使應用程式的輸入、處理和輸出分開。使用MVC應用程式被分成三個核心組件:模型(M)、視圖(V)、控制器(C),它們各自處理自己的任務。
- 視圖 :視圖是使用者看到並與之互動的介面。對老式的Web應用程式來說,視圖就是由HTML元素組成的介面,在新式的Web應用程式中,HTML依舊在視圖中扮演著重要的角色,但一些新的技術已層出不窮,它們包括Adobe Flash和象XHTML,XML/XSL,WML等一些標識語言和Web services。如何處理應用程式的介面變得越來越有挑戰性。MVC一個大的好處是它能為你的應用程式處理很多不同的視圖。在視圖中其實沒有真正的處理髮生,不管這些資料是聯機儲存的還是一個僱員列表,作為視圖來講,它只是作為一種輸出資料並允許使用者操縱的方式。
- 模型 :模型表示企業資料和商務規則。在MVC的三個組件中,模型擁有最多的處理任務。例如它可能用象EJBs和ColdFusion Components這樣的構件對象來處理資料庫。被模型返回的資料是中立的,就是說模型與資料格式無關,這樣一個模型能為多個視圖提供資料。由於應用於模型的代碼只需寫一次就可以被多個視圖重用,所以減少了代碼的重複性。
- 控制器 :控制器接受使用者的輸入並調用模型和視圖去完成使用者的需求。所以當單擊Web頁面中的超連結和發送HTML表單時,控制器本身不輸出任何東西和做任何處理。它只是接收請求並決定調用哪個模型構件去處理請求,然後確定用哪個視圖來顯示模型處理返回的資料。
現在我們總結MVC的處理過程,首先控制器接收使用者的請求,並決定應該調用哪個模型來進行處理,然後模型用商務邏輯來處理使用者的請求並返回資料,最後控制器用相應的視圖格式化模型返回的資料,並通過展示層呈現給使用者。
CURD
CURD是一個資料庫技術中的縮寫詞,一般的項目開發的各種參數的準系統都是CURD。它代表建立(Create)、更新(Update)、讀取(Read)和刪除(Delete)操作。CURD 定義了用於處理資料的基本原子操作。之所以將CURD 提升到一個技術難題的高度是因為完成一個涉及在多個資料庫系統中進行CURD操作的匯總相關的活動,其效能可能會隨資料關係的變化而有非常大的差異。
CURD在具體的應用中並非一定使用create、update 、read和delete字樣的方法,但是他們完成的功能是一致的。例如,ThinkPHP就是使用add、save、select和delete方法表示模型的CURD操作。
單一入口
單一入口通常是指一個項目或者應用具有一個統一(但並不一定是唯一)的入口檔案,也就是說項目的所有功能操作都是通過這個入口檔案進行的,並且往往入口檔案是第一步被執行的。
單一入口的好處是項目整體比較規範,因為同一個入口,往往其不同操作之間具有相同的規則。另外一個方面就是單一入口帶來的好處是控制較為靈活,因為攔截方便了,類似如一些許可權控制、使用者登入方面的判斷和操作可以統一處理了。
或者有些人會擔心所有網站都通過一個入口檔案進行訪問,是否會造成太大的壓力,其實這是杞人憂天的想法。
ORM
對象-關係映射(Object/Relation Mapping,簡稱ORM),是隨著物件導向的軟體開發方法發展而產生的。物件導向的開發方法是當今企業級應用開發環境中的主流開發方法,關聯式資料庫是企業級應用環境中永久存放資料的主流資料存放區系統。對象和關係資料是業務實體的兩種表現形式,業務實體在記憶體中表現為對象,在資料庫中表現為關係資料。記憶體中的對象之間存在關聯和繼承關係,而在資料庫中,關係資料無法直接表達多對多關聯和繼承關係。因此,對象-關係映射(ORM)系統一般以中介軟體的形式存在,主要實現程式對象到關聯式資料庫資料的映射。
物件導向是從軟體工程基本原則(如耦合、彙總、封裝)的基礎上發展起來的,而關聯式資料庫則是從數學理論發展而來的,兩套理論存在顯著的區別。為瞭解決這個不匹配的現象,對象關係映射技術應運而生。