基礎:
1. 基礎概念
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),它們各自處理自己的任務。
視圖 :視圖是使用者看到並與之互動的介面。對老式的網路應用程式來說,視圖就是由HTML元素組成的介面,在新式的網路應用程式中,HTML依舊在視圖中扮演著重要的角色,但有些新的技術已層出不窮,它們包括Adobe Flash和象XHTML,XML/XSL,WML等一些識別語言和Web services。如何處理應用程式的介面變得越來越有挑戰性。 MVC一個大的好處是它能為你的應用程式處理很多不同的視圖。在視圖中其實沒有真正的處理發生,不管這些資料是線上儲存的還是一個僱員列表,作為視圖來講,它只是作為一種輸出資料並允許使用者操縱的方式。
模型 :模型表示企業資料與商業規則。在MVC的三個部件中,模型擁有最多的處理任務。例如它可能用象EJBs和ColdFusion Components這樣的構件物件來處理資料庫。被模型回傳的資料是中立的,就是說模型與資料格式無關,這樣一個模型能為多個視圖提供資料。由於應用於模型的程式碼只需寫一次就可以被多個視圖重複使用,所以減少了程式碼的重複性。
控制器 :控制器接受使用者的輸入並呼叫模型和視圖去完成使用者的需求。所以當點擊Web頁面中的超連結和發送HTML表單時,控制器本身不輸出任何東西和做任何處理。它只是接收請求並決定呼叫哪個模型構件去處理請求,然後確定用哪個視圖來顯示模型處理傳回的資料。
現在我們總結MVC的處理過程,首先控制器接收用戶的請求,並決定應該調用哪個模型來進行處理,然後模型用業務邏輯來處理用戶的請求並返回數據,最後控制器用相應的視圖格式化模型傳回的數據,並透過表示層呈現給使用者。
ORM
物件-關係映射(Object/Relation Mapping,簡稱ORM),是隨著物件導向的軟體開發方法發展而產生的。物件導向的開發方法是當今企業級應用程式開發環境中的主流開發方法,關聯式資料庫是企業級應用程式環境中永久存放資料的主流資料儲存系統。對象和關聯式資料是業務實體的兩種表現形式,業務實體在記憶體中表現為對象,在資料庫中表現為關聯式資料。記憶體中的物件之間存在關聯和繼承關係,而在資料庫中,關係資料無法直接表達多對多關聯和繼承關係。因此,物件-關聯映射(ORM)系統一般以中間件的形式存在,主要實現程式物件到關聯式資料庫資料的映射。
物件導向是從軟體工程基本原則(如耦合、聚合、封裝)的基礎上發展起來的,而關聯式資料庫則是從數學理論發展而來的,兩套理論存在顯著的差異。為了解決這個不匹配的現象,物件關係映射技術應運而生。
AOP
AOP(Aspect-Oriented Programming,面向方面程式設計),可以說是OOP(Object-Oriented Programing,物件導向程式設計)的補充和完善。 OOP引入封裝、繼承和多態性等概念來建立一種物件層次結構,以模擬公共行為的一個集合。當我們需要為分散的對象引入公共行為的時候,OOP則顯得無能為力。也就是說,OOP允許你定義從上到下的關係,但不適合定義從左到右的關係。例如日誌功能。日誌程式碼往往水平地散佈在所有物件層次中,而與它所散佈到的物件的核心功能毫無關係。對於其他類型的程式碼,如安全性、異常處理和透明的持續性也是如此。這種散佈在各處的無關的程式碼稱為橫切(cross-cutting)程式碼,在OOP設計中,它導致了大量程式碼的重複,而不利於各個模組的重用。而AOP技術則恰恰相反,它利用一種稱為「橫切」的技術,剖解開封裝的物件內部,並將那些影響了多個類別的公共行為封裝到一個可重用模組,並將其名為“Aspect”,即方面。所謂“方面”,簡單地說,就是將那些與業務無關,卻為業務模組所共同調用的邏輯或責任封裝起來,便於減少系統的重複代碼,降低模組間的耦合度,並有利於未來的可操作性和可維護性。 AOP代表的是一個橫向的關係,如果說「物件」是一個空心的圓柱體,其中封裝的是物體的屬性和行為;那麼面向方面編程的方法,就彷彿一把利刃,將這些空心圓柱體剖開,以獲得其內部的消息。而剖開的切面,也就是所謂的「面向」了。然後它又以巧奪天功的妙手將這些剖開的切面復原,不留痕跡。
使用「橫切」技術,AOP把軟體系統分成兩個部分:核心關注點和橫切關注點。業務處理的主要流程是核心關注點,與之關係不大的部分是橫切關注點。橫切關注點的一個特點是,他們經常發生在核心關注點的多處,而各處都基本相似。例如權限認證、日誌、事務處理。 Aop 的作用在於分離系統中的各種關注點,將核心關注點和橫切關注點分開。正如Avanade公司的高級方案架構師Adam Magee所說,AOP的核心思想就是「將應用程式中的商業邏輯同對其提供支援的通用服務進行分離。」
CURD
CURD是一個資料庫
CURD
CURD在具體的應用中並非一定使用create、update 、read和delete字樣的方法,但是他們完成的功能是一致的。例如,ThinkPHP就是使用add、save、select和delete方法表示模型的CURD操作。
ActiveRecord
Active Record 驅動框架一般兼有 ORM 框架的功能,但 Active Record 不是簡單的 ORM,正如和 Row Gateway 的區別。由Rails最早提出,遵循標準的ORM模型:表格映射到記錄,記錄映射到對象,字段映射到對象屬性。配合遵循的命名和配置慣例,能夠很大程度的快速實現模型的操作,而且簡潔易懂。
🎜🎜🎜🎜單一入口🎜單一入口通常是指一個專案或應用具有一個統一(但不一定是唯一)的入口文件,也就是說專案的所有功能操作都是透過這個入口文件進行的,並且往往入口文件是第一步被執行的。
單一入口的好處是專案整體比較規範,因為同一個入口,往往其不同操作之間具有相同的規則。另外一個方面就是單一入口帶來的好處是控制較為靈活,因為攔截方便了,類似如一些權限控制、用戶登入方面的判斷和操作可以統一處理了。
或有些人會擔心所有網站都透過一個入口文件進行訪問,是否會造成太大的壓力,其實這是杞人憂天的想法。
2. 目錄結構
目錄/檔案 | 說明 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Conf | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Lang | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Lib | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
框架擴充目錄(關於擴充目錄的詳細資訊請參考後面的擴充章節) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
生成的項目目錄和目錄: | |
---|---|
說明 | |
專案公用檔案目錄,一般放置專案的公用程式 | 。 |
專案語言套件目錄(選用 如果不需要多語言支援 可刪除) | |
專案類別庫目錄,通常包含Action和Model子目錄 | ” |
Runtime | |
目錄/檔案
)目錄?
Uploads | 網站上傳目錄(用戶上傳的統一目錄) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Home | 目錄目錄( | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
目錄(下面的目錄項目目錄應用目錄) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
後台管理專案目錄 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
index.phpphp的入口文件 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
… 更多的專案入口文件 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
檔案名稱 | 說明 | .|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
專案行為設定檔 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
專案別名定義檔 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
core.php | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
12. 函式庫 ThinkPHP中的函式庫可以分為系統函式庫和專案函式庫。 系統函數庫 庫系統函數庫位於系統的Common目錄下面,有三個檔案: runtime.php是框架運行時文件,僅在調試模式或編譯過程才會被加載,因此其中的方法在項目中不能直接調用; 項目函數庫 在特殊的情況下,模式可以改變自動載入的項目函數庫的位置或名稱。 擴充函式庫 函式庫我們可以在專案公用目錄下面定義擴充函式庫,方便需要的時候載入和呼叫。擴展函數庫的函數定義規範和項目函數庫一致,只是函數庫文件名可以隨意命名,一般來說,擴展函數庫並不會自動加載,除非你設定了動態載入。 函數加載
"LOAD_EXT_FILE"=>"user,db"
load("@.user" )
調用路徑 說明
核心類別庫包下麵包含下面核心類別庫:
|