開始使用三種PHP 架構常用架構

來源:互聯網
上載者:User

Zend、symfony、CakePHP

短短數年前,對 PHP 最常見批評之一是不支援 MVC 樣式的架構。隨著時代的變遷,現在在 PHP 架構領域裡可以獲得多種選擇。本系列將介紹三個廣泛使用的 PHP 架構 —— Zend、symfony 和 CakePHP —— 通過在三個架構中構建和擴充範例應用程式來檢驗這三個架構的類似之處和不同之處。
“PHP 架構” 系列專門針對那些想要開始使用架構、但又沒有機會詳細檢驗可用架構的 PHP 開發人員。在學完本系列後,您將瞭解選擇這三個架構的原因、如何安裝每個架構,並且充分運用將在三個架構中擴充的測試應用程式。聽起來要學習的內容很多,但是不必擔心。內容雖然多,但是我們已經把內容細分為多個便於管理的部分。

 
關於本系列

本系列的第 1 部分將列出本系列涵蓋的內容,介紹將進行考察的架構以及說明如何安裝,並查看將構建的第一個測試應用程式。

第 2 部分將指導您在三個架構中構建範例應用程式,著重說明了它們的類似之處和不同之處。

第 3 部分從擴充測試應用程式開始,然後處理不符合一般規律的例外情況。所有架構都能很好地完成份內的任務。每個項目中都需要完成一些架構設定工作之外的事情。第 2 部分就將介紹那些情況。

第 4 部分主要介紹了 Ajax 支援。使用機器碼和第三方庫檢驗了 Ajax 的使用 —— 特別介紹了每個架構如何運行及接受具體的常用庫。

第 5 部分將處理如何在架構外部工作。設定一項任務(每晚更新指令碼),並在每個架構中檢驗完成此項任務的過程。

 

本文提供了大量內容。您必須快速地跟上節奏。本文要對三種架構進行審視。是哪三種架構?為什麼要針對這三種架構?還有其他哪些架構?為什麼不選擇其他架構?太多的問題要解答!但是在執行每個架構的安裝過程之前,大部分問題都將得到回答。然後您將瞭解本系列後續文章中使用的測試應用程式。您馬上就可以瞭解不同架構之間有何不同之處以及這些架構都可以實現哪些相同的工作。

系統要求

開始之前,需要具備一定的工作環境。需要滿足的要求包括:

支援會話的 HTTP 伺服器(並且最好啟用了 mod_rewrite)—— 本系列使用的是啟用了 mod_rewrite 的 Apache V1.3。
PHP V5.1.4 或更高版本 —— 並不是所有架構都需要使用此版本層級的 PHP,但是為了簡單起見,所有架構都將使用同一個 PHP 安裝。本系列使用的是 PHP V5.2.3。
最近發布的 MySQL 安裝 —— 可以使用並支援若干種其他資料庫選擇,但是本系列和範例應用程式都是使用 MySQL V5.0.37 編寫的。
支援 PHP V5.2.4 或更高版本及 MySQL 的作業系統 —— 本系列中使用了 Linux。如果您是 Windows 使用者,則需要做出明顯的調整,尤其在下面介紹建立目錄時。
先決條件

假定您已經瞭解 PHP、應用程式設計,以及如何在資料庫中工作。不要求您具有架構使用經驗,但是您應當已經準備好開始使用架構。

 

模型架構

在瞭解哪些架構被選中之前,有必要來討論一下架構是什麼。

架構思想就是提供一種可以在多個應用程式中使用的設計。所有應用程式都有大量通用的基本內容 —— 具體地說,就是某類與資料庫的介面、某些應用程式邏輯、應用程式呈現給使用者的內容等。如果您編寫過許多 PHP 應用程式,則會知道這些基本內容是什麼。您可能已經編寫過一組函數或從資料庫中讀取資料和向資料庫中寫入資料的類,可能已經使用過諸如 Smarty 之類的模板引擎來管理 UI。而且一定編寫過大量 PHP 代碼來完成諸如分析表單提交並根據提交的資料作決定之類的事務。如果您已經編寫過很多應用程式,則可能已經一次又一次地做過相同的基本工作,有時還會將一個應用程式中的代碼借用到另一個應用程式中。

架構專門用於為這些常用元素(資料庫互動、展示層、應用程式邏輯)提供結構,以便您可以花費更少的時間來編寫資料庫介面代碼或者展示層介面,而花費更多的時間來編寫應用程式本身。以這種方式分解應用程式,這種架構被稱為模型-視圖-控制器(Model-View-Controller,MVC)。模型 指資料,視圖 指展示層,而控制器 指應用程式邏輯或商務邏輯。對 MVC 的完整討論超出本文的範圍,但是鼓勵您研究 MVC 並深入瞭解 MVC 的一切(請參閱 參考資料)。

 

選擇架構

每種語言幾乎都有若干個架構可用。選擇剛好滿足需求的架構可能有點難,尤其是當您以前未曾使用過任何一個架構時更是如此。雖然熟悉此領域的同事和可信賴的 developerWorks 作者提供的建議和評價會十分有協助,但是選擇任何架構時實際上應當遵循的惟一一個指導原則是:架構為每個人 節省的時間和精力越多越好。如果一個架構工作得很好但是會導致產生大量支援調用,那就不是一個優秀架構。如果一個架構易於支援,但是起到的阻礙作用大於輔助開發作用,那也不是一個優秀架構。如果一個架構十分優雅,但是會導致出現支援問題和開發問題,那麼這個架構也是沒有用的。

選擇項目架構時,考慮從上到下所有相關人員的意見,並且在評估架構時,考慮到對其他各方的影響。

當考慮採用一個架構時,請進一步審視您的應用程式,並思考該應用程式是不是需要一個架構。架構不是必需品。即使不使用架構,也可以繼續編寫公司專屬應用程式程式。架構會對項目有協助嗎?它是否會節省每個人的時間和精力?您的應用程式在架構中是否會執行得更好?它是否將提供所缺乏的穩定性?如果上面任意一個問題的答案為是,那麼您應當考慮採用架構。如果所有這些問題的答案都為否,那麼使用架構只會把事情變複雜。

可惜,本文的長度和範圍限制不允許全面介紹所有可用的 PHP 架構。本系列主要介紹三個架構:

Zend 架構
symfony
CakePHP
選擇這些架構的原因有很多,但可能都屬於這幾類因素:“您老闆聽說過的架構”、“某些人已經安裝過的架構” 或者 “曾經談論過的架構”。我鼓勵您研究 CodeIgniter、Seagull、Web Application Component Toolkit (WACT)、PRADO、Zoop、PHP on Trax 或者其他眾多可用 PHP 架構中的一個。架構選擇全憑個人喜好,就像選擇用哪種語言編寫代碼一樣。本系列不會告訴您哪個架構比其他架構更好或更差。哪個架構在某方面做得好,我們就會討論它。哪個架構看上去不實用,我們也會討論它。即使我們不能全面地涵蓋各種架構,我們採用的方法也將協助您學會衡量其他架構的優點和缺點。您需要對正在檢驗的架構形成自己的觀點,哪些架構您喜歡,並且決定繼續使用哪個架構。

Zend 架構

所有人都知道 Zend —— “PHP 公司”。當您下載和安裝 PHP 時,從大約 V3 開始,您就是在從 Zend 下載 PHP。除了發布 PHP 之外,Zend Technologies 多年來已經提供了大量 PHP 支援技術。Zend 提供適用於 PHP 的架構應當不稀奇 —— 這是一個到現在為止已經有兩百萬下載次數的流行架構。如果您老闆聽說過 PHP 架構,那麼很可能指的就是 Zend 架構。

symfony

由 Sensio 贊助的 symfony “旨在提高建立和維護 Web 應用程式的速度,以及用功能、控制和愉悅來替代重複性的編碼任務”。symfony 架構已經在世界各地的許多企業級應用程式中使用,其中可能包括最著名的 Askeet 和 Yahoo! 書籤。如果您認識的某個人安裝、使用或玩轉某個 PHP 架構,那麼該架構很可能就是 symfony。

CakePHP

CakePHP 大部分源自 Ruby on Rails,它旨在把簡單性和延展性引入到 PHP 架構中。CakePHP 一直被視為頂級 PHP 架構,並且 PHP V5 最近被選作 Mambo Content Management System 的核心。受強大的社區及快速增長的使用者庫推動,CakePHP 的受歡迎程度正在穩步增加。如果您曾聽到過關於 PHP 架構的討論,那麼該討論可能就是關於 CakePHP 的。

 

安裝

每個架構都有自己的一組安裝說明,並且完整的安裝細節超出本文的範圍。本文將重點說明這三個架構的安裝,突出每個單獨架構的安裝說明裡可能未涉及的要點,或者需要有別於安裝說明的內容,因為將全部三個架構安裝到一台電腦上十分特殊。

首先建立一個檔案夾來儲存所有代碼、架構並包括本系列需要的內容(例如,名為 /column 的目錄)。在此目錄中,建立四個附加目錄:htdocs、protected、include 和 src。編輯 Apache conf 檔案,使主目錄指向 /column/htdocs —— 然後當您處於該目錄中時(如果尚不在其中),應當啟用 mod_rewrite。編輯 php.ini conf 檔案使 /column/include/ 目錄包含在 include_path 指令中。如果您還沒明白所有這些操作的意義,請不要著急。當您安裝架構時,一切都會變得清晰。

安裝 Zend 架構

下載 Zend 架構(請參閱 參考資料)。本系列使用的是 V1.0.1。下載並將 Zend 架構解壓縮到 /column/src 目錄中。該發行版將包含若干個文字檔和三個目錄:demos、tests 和 library。把庫目錄(這應當只是名為 Zend 的檔案夾)的內容複寫到 /column/include/ 目錄中。現在應當有包含若干個目錄和檔案的名為 /column/include/Zend 的檔案夾。這些是 Zend 架構所使用的庫。

好的!您已經安裝了 Zend 架構。

安裝 symfony

下載 symfony(請參閱 參考資料)。您可以通過下載頁面中列出的任意一種方法隨意安裝 symfony,但是出於我們的目的建議下載 tarball。將 tarball 解壓縮到 /column/src/symfony/ 目錄中。您應當會看到四個目錄(data、doc、lib 和 licenses),以及一些 README 文檔。對於安裝完成的應用程式來說,並不是所有的這些文檔和目錄都是必需的,但是現在,有這些文檔和目錄是可以的。對於安裝來說,看上去可能過於簡單。一定要記住,這些架構一般都是由公用程式和庫組成的,因此安裝架構並不難。使用架構需要執行一些追加配置。稍後您就將清楚如何配置。

安裝 CakePHP

下載 CakePHP(請參閱 參考資料)。本系列使用的是 1.2.0.5427alpha 版本。不管是不是成熟的 alpha 版本,CakePHP 的 1.2 分支已經成為 CakePHP 社區廣泛接受的標準。下載並解壓縮 tarball,將其內容放到 /column/src/cakephp 中。應當得到四個目錄(app、cake、doc 和 vendors)以及兩個檔案(.htaccess 和 index.php)。稍後將對這些檔案中的一些檔案進行操作,不過現在這樣就可以了。

 

測試應用程式

您已經下載並安裝了三個架構。但是您可能已經注意到自己尚未用這三個架構執行任何實際操作,例如用 Hello World 應用程式檢驗安裝。那是因為您要跳過 Hello World 並轉到較深入(但不會非常深入)的內容中。

在 PHP 架構中構建 Hello World 應用程式可能會有點痛苦。使用架構需要花費一定的系統開銷,並且該系統開銷發生在您嘗試建立諸如 Hello World 等簡單內容時。但是,在處理更複雜的應用程式時,同樣的系統開銷看上去則成為合理的支出。

您將構建的測試應用程式並不複雜。該測試應用程式將允許您使用文本地區把文本粘貼到應用程式中。該文本將被儲存到資料庫中並在請求時由該應用程式檢索來顯示。使用這樣一個應用程式,您將可以輕鬆地建立和更新 Web 網站中的內容,而無需編輯 HTML 或上傳新檔案。這種高度創新並使用新方法的應用程式將被稱為 Blahg。

Blahg 怎樣使用?

根據 Blahg 的描述,您可能已經推斷出如何設計應用程式需要考慮的幾個方面。Blahg 需要四個元素:

包含表單的頁面 —— 此表單至少要包含一個文本地區。此頁面將是寫入頁面。
讀取粘貼內容的頁面 —— 此頁面將需要被傳遞給某種 post 標識符。此頁面將是讀取頁面。
列出可用粘貼內容的頁面 —— 此頁面將是索引頁面。
儲存粘貼內容的資料庫表 —— 這張表至少需要儲存粘貼的文本和 post 標識符,還可能儲存 Post 標題和粘貼內容的最後一次修改日期。
很明顯,Blahg 可以比現在更健壯,並且稍後在本系列中,您將執行一些增強工作。但是現在,滿足這些簡單要求就足夠。可惜的是,您現在還不能獲得在任意一個架構中構建 Blahg 的機會。那要在第 2 部分中進行。但是現在是設定您將使用的資料庫的最佳時機。

 

 

設定資料庫

在可以實際構建 Blahg 之前,需要設定資料庫。並不是每個單獨架構都必須設定資料庫,但是出於本系列的學習目的,這樣做將使事情變得更有序,同時可以避免必需的表首碼。

建立三個名為 Zend、symfony 和 Cake 的資料庫,並將對每個資料庫的全部許可權授權給相應的使用者。下面每個架構的指令都將包含建立 posts 表必需的 SQL。

擺弄資料庫的同時,您也可以建立 Blahg 將在開頭使用的表。使用以下 SQL 在 Zend 和 symfony 資料庫中建立 posts 表。

清單 1. 在 Zend 和 symfony 中建立 posts 表
                
CREATE TABLE 'posts' (
'id' INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
'title' VARCHAR( 255 ) NOT NULL ,
'text' TEXT NOT NULL ,
'modified' TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE = MYISAM ;
 

對於 Zend 和 symfony,將把對修改後的列的維護工作留給資料庫。對於 CakePHP,將使用略有不同的 SQL。這樣做將使 Cake 為您變一些魔術(尤其是,CakePHP 將自動維護修改後的列)。

清單 2. 在 CakePHP 中建立 posts 表
               
CREATE TABLE 'posts' (
'id' INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
'title' VARCHAR( 255 ) NOT NULL ,
'text' TEXT NOT NULL ,
'modified' DATETIME DEFAULT NULL
) ENGINE = MYISAM ;
 

這和使用表文法一樣簡單。根據這些表的外觀,您應當非常清楚 Blahg 的外觀及運行會是怎樣的。您甚至可能親自構建 Blahg。

 

接下來的步驟

請忍住要立即投入並開始玩轉架構的誘惑。相反,花一些時間在不使用任何架構的情況下構建 Blahg。用您慣用的方法編寫一個應用程式,不用管那是一種什麼樣的方法。構建 Blahg 時一定要遵守上面列出的要求 —— 仍然不要太有想象力。通過在架構上下文外部構建測試應用程式並修改應用程式以包括在本系列中構建的增強功能,您可以很好地衡量給定架構對需求和開發風格的滿足程度。

 回頁首
 

 

結束語

到這裡,我們已經打好了基礎。我希望您的安裝順利完成,但是如果遇到任何問題,則一定要研究每個單獨架構的安裝文檔(請參閱 參考資料)。請花一些時間根據以上指導資訊構建 Blahg。這將是您值得花時間去做的事情。

 

參考資料

學習

您可以參閱本文在 developerWorks 全球網站上的 英文原文。

查閱 Zend Framework 手冊。

獲得 symfony 文檔。

查閱 CakePHP 手冊(註:該手冊是為 CakePHP V1.1 撰寫的。如果您使用的是 CakePHP V1.2,則可能會有些差別)。

閱讀五部分系列教程 “Cook up Web sites fast with CakePHP”。

訪問 Wikipedia 進一步瞭解 軟體架構。

從 Wikipedia 中獲得 MVC 結構 的概覽。

有關更多資訊,請參考 PHP 手冊。

要獲得其他 PHP 文檔,請訪問 PHP.net。

要獲得學習如何用 PHP 編程的教程,請查閱 developerWorks “學習 PHP” 系列。

PHP.net 是 PHP 開發人員的重要資源。

查看 “PHP 推薦讀物列表”。

瀏覽 developerWorks 上的全部 PHP 文章和PHP 教程。

查看 IBM developerWorks 的 PHP 項目資源 以擴充 PHP 技巧。

收聽針對軟體開發人員的有趣訪談和討論,一定要訪問 developerWorks podcast。

要將資料庫與 PHP 結合使用?查看 Zend Core for IBM,它是一個無縫的、可以立即使用、易於安裝、支援 IBM DB2 V9 的 PHP 開發和生產環境。

隨時關注 developerWorks 的 技術事件和網路廣播。

查閱最近將在全球舉辦的面向 IBM 開放源碼開發人員的研討會、交易展覽、網路廣播和其他 活動。

訪問 developerWorks 開放源碼專區,獲得豐富的 how-to 資訊、工具和項目更新,協助您用開放源碼技術進行開發,並與 IBM 產品結合使用。

查看免費的 developerWorks On demand demo 觀看並瞭解 IBM 及開源技術和產品功能。

 

獲得產品和技術

下載 PHP V5.2.3。

下載 symfony。

下載 CakePHP。

使用 IBM 試用軟體 改進您的下一個開發項目,這些軟體可以通過下載或從 DVD 中獲得。

下載 IBM 產品評估版,並開始使用 DB2、Lotus、Rational、Tivoli 和 WebSphere 的應用程式開發工具和中介軟體產品。

 

討論

參與 developerWorks blog 並加入 developerWorks 社區。

加入 developerWorks PHP Forum: Developing PHP applications with IBM Information Management products (DB2, IDS)。

 

關於作者

 

  Duane O'Brien 從 Oregon Trail 還只是文本的時候開始,就一直在技術方面遊刃有餘。他喜歡的食物是壽司。他還不曾去過月球。
 
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.