用PHP開發健壯的代碼系列文章是關於解決大中型應用程序中的實際問題的。這一系列文章主要側重於PHP4中可用的新功能,重點介紹了大量使開發工作更容易的技巧和竅門。在這一系列文章中,您將發現許多要學習的示例和技術,還附帶了大量樣本代碼。在這第一篇文章中,PHP高手Amol Hatwar從更高的角度介紹了如何為中到大型Web 應用程序設計和編寫無錯誤、可維護的代碼。
如果您是一名構建Web應用程序的開發者並且需要速度、功能和平台獨立性(platform-independence),那麼PHP將適合您。而且PHP是免費的,易於學習和部署。這些是使PHP如此受歡迎的最大優點。但這些優點也可以變成缺點。由於PHP易於使用,所以開發者在本應規劃和設計的時候,他們經常先把代碼硬塞到編輯器中。而且,在PHP中,解決問題的方法不止一種,比較容易犯那種慘痛的錯誤,這種錯誤過後難以訂正。
在這一系列文章中,您將學會如何避免許多錯誤。如果您一步不落地堅持到底,您會發現自己嘗試一兩次就能編寫無錯誤的代碼了,對此不要感到奇怪。我還會指出PHP4 中可用的新功能,它們使開發工作更容易。我要介紹的大多數示例都是用來處理諸如腳本配置和安裝、文件處理以及數據庫使用之類的實際問題。即使您對這一切都不熟悉,您也會發現理解起來很容易。不過,我假設您對PHP有初步的了解。如果您需要重新溫習,您會發現本文結尾處所列出的參考資料會對您有所幫助。
奠定健壯的基礎
用PHP編寫代碼與用類似 C 的語言編寫代碼非常相似。由於它們句法上類似,所以還會導致類似的代碼維護問題。當必須開發大型應用程序時,您可能要編寫大量代碼。隨著時間的流逝,這些代碼可能變得難以管理,錯誤很快就會乘虛而入。無論您從哪裡聽到這種說法,都不要相信 — 至少不能全信。但是,更重要的事實是如果您發現自己維護代碼過於頻繁,那麼首先您的應用程序的設計可能是很糟糕的。
正確地設計代碼
您最初做出的選擇會影響您以後編寫代碼時的自由度。這使得正確的設計成為一個重要的先決條件。雖然當您解決一個微不足道的問題時設計會成為一個額外的儀式,但是您至少必須知道就是應該這樣做的。許多人把設計和規劃看作額外的開銷。但是以糟糕的設計開始,或者根本就沒有設計,結果總是會造成草率的代碼。請記住,再巧妙的編碼也不能彌補糟糕的設計。雖然如何設計應用程序超出了這個系列文章的范疇,但我還是會提示一些設計Web應用程序時應該牢記的問題。
分割和征服
通過一個個較小的松散耦合的部件來設計和編寫大型應用程序總是更可取的。這樣,每個部件都是可維護的。例如,一個內容管理系統(Content Management System,CMS)可能分布在許多諸如用戶認證、顯示、內容解析和查看統計信息等較小的模塊上。而且,如果您的模塊足夠通用的話,您可以在您開發的其它應用程序中重用代碼。程序員經常這麼做,但他們仍然抱怨。至於編碼的技巧就是讓每個模塊具有它絕對需要的功能並且到此為止。賦予一個模塊的功能要不多不少,恰到好處。
絕對不要在頁面中考慮
如果您對用PHP將您的 HTML 頁面變得更動態些感興趣,這部分將適合您。當您想在每個頁面上顯示日期和時間以使其看上去是最新的時候,通常是這個習慣開始的時候。每個 HTML 頁面都變成一個只有有限幾行的小PHP腳本,日期函數隱藏在某個地方。如果這是您想要的,您必須認可這是使該作業實現的最簡單的方式。但是,想象一下您必須做些什麼變動才能改變頁面上呈現的日期格式。您將不得不更改每個頁面內的代碼。
顯然,有更好的方式來達到這個目的。我最喜歡的方式是使用配置文件並在配置文件中定義一個常量,這個常量保留 date() 函數的格式字符串。然後,您就可以在需要的地方使用 date() 函數了。每個頁面仍以腳本結束,但是您要徹底地把那些您必須對單行代碼作更改的地方降到最少。
圖 1. 避免硬編碼
如 圖 1所示,您在所有頁面上都能看到日期格式的更改。這裡的想法就是要避免復制代碼以及硬編碼。在編寫大型應用程序時,請牢記這一點。當您避免了復制代碼時,調試和維護就變得更加容易了。