10 位頂級 PHP 大師的開發原則

迷渡發表於2013-03-30
在 WEB 開發世界裡,PHP 是最流行的語言之一,從 PHP 裡,你能夠很容易的找到你所需的指令碼,遺憾的是,很少人會去用“最佳做法”去寫一個 PHP 程式。這裡,我們向大家介紹 PHP 的 10 種最佳實踐,當然,每一種都是經過大師們證明而得出的。 

1. 在合適的時候使用 PHP – Rasmus Lerdorf

沒有誰比 PHP 的建立者 Rasmus Lerdorf 明白 PHP 用在什麼地方是更合理的,他於 1995 年釋出了 PHP 這門語言,從那時起,PHP 就像燎原之火,燒遍了整個開發陣營,改變了網際網路的世界。可是,Rasmus 並不是因此而建立 PHP 的(oracle.com/technetw)。PHP 是為了解決 WEB 開發者的實際問題而誕生的。 

和許多開源專案一樣,PHP 變得流行,流行的動機並不能用正常的哲學來進行解釋,甚至流行得有些孤芳自賞。它完全可以作為一個案例,一個解決各種 Web 問題的工具需求所引起的案例,因此當 PHP 剛出現的時候,這種工具需求全部聚焦到PHP的身上。

但是,你不能奢望 PHP 可以解決所有問題。Lerdorf 是第一個承認 PHP 只是一種工具的人,並且 PHP 也有很多力所不能及的情況。 

根據工作的不同來選擇合適的工具。我跑了很多家公司,為了說服他們部署和使用 PHP,但是這並不意味著 PHP 對所有問題都適用。它只是可以一個解決大部分問題的 front-end 腳步語言。

作為一個 web 開發者,嘗試用 PHP 解決所有問題是不科學的,同時也會浪費你的時間。當 PHP 玩不轉的時候,不要猶豫,試用一下其他的語言吧。 

2. 使用多表儲存提高規模伸縮性 – Matt Mullenweg

沒有人願意質疑 Matt Mullenweg 在 PHP 方面的權威性,他開發了這個星球上最流行的 blog 系統,(依靠一個強大的社群力量支援): WordPress(wordpress.org/). 建立 Wordpress 以後,Matt 和他的團隊啟動了 WordPress.com 平臺,一個基於 WordPress MU 的免費 blog 站點。現在,Wordpress.com 已經擁有大約 400 萬使用者, 這些使用者每天提供超過 140,000 篇的日誌。 

如果有人知道如何讓網站的規模伸縮自如,這個人一定是 Matt Mullenweg。2006 年的時候 Matt 對 Wordpress 的資料結構進行了前瞻性的改進,並且解釋了為什麼Wordpress MU 對每個 blog 使用獨立的 MYSQL 表格, 而不是把所有的 blog 資料都塞進一個巨大的表格。 

我們測試過這個方法,但是發現如果要擴充套件它的伸縮性,代價太高。如果用一個整體的資料結構,在大流量面前,你將會面臨伺服器硬體的問題。在 MU 裡面。使用者們都被分佈到獨立的表格當中,並且可以輕易地組織起來。舉個例子,WordPress.com 把使用者的資料分散儲存到 4096 個資料庫中,這些資料庫可以分散大規模的資料訪問,實現流量和壓力分流。

資料表的可遷移性讓程式碼(blog)可以執行得更快,並且讓系統具備更強的伸縮性。依靠強大的快取策略和靈活的資料庫運用策略, Matt 向人們展示了時下最流行的 Facebook 和 Wordpress.com 都可以在 PHP 下穩定執行,並且處理驚人的訪問量。 

3. 千萬不要相信使用者 – Dave Child

Dave Child 是 Added Bytes (previously ilovejackdaniels.com) 網站的核心人物,這個網站以他出色的《cheat sheets for many programming languages》(addedbytes.com/cheat-sh)而聞名。 Dave 為很多英國的公司服務,並且已經在程式設計世界裡樹立起相當的權威。 

Dave 為 PHP 開發者提供了很多深謀遠慮的建議,並總結成了《writing secure code in PHP》:千萬不要相信你的使用者,他們甚至可能會傷害你。

有一條 web 開發的基本原則,我重複多少遍都覺得不夠,那就是:千萬不要相信你的使用者,同時要假設你網站中的每個資料單元都是從使用者那裡收集來的惡意程式碼。很多時候,你必須用 JAVAscript 在客戶端檢驗表單提交過來的內容, 如果你習慣瞭如此,那麼,這是一個好習慣。如果安全性對你來說很重要,這就是最重要最需要學習的原則。

Dave 目前正致力於為它的《Writing Secure PHP》系列書籍整理例項,書的最後他說: 

最後,變得偏執一點吧。除非你認為你的站點永遠不會受到攻擊,否則就正視所有的問題,當問題真正發生的時候,你的情況會變得很糟。你需要把每個使用者都看成會帶來一場攻防站的黑客,想盡一切辦法來保護站點的安全,同時想好相應問題的解決方案。

4. 多使用 PHP 快取 – Ben Balbo

Ben Balbo 開發了 Site Point,一個為 developers 和 designers 提供指導的網站。他是墨爾本 PHP 開發和開源俱樂部的成員, 因此他對 PHP 有一定的瞭解,同時對 PHP caching (sitepoint.com/article)有一定的想法和經驗。 

如果你擁有一個訪問量很大,但更新並不頻繁的站點(比如 blog,基於某種 CMS),或許它需要進行一些改造,這些改造不會花費太多的時間,但是對效能有突出的貢獻。 如果要為一個複雜/更新頻率很快的站點建立快取機制,過程可能會很曲折,但是好處也是顯而易見的。

PHP 快取技術有很多種,Ben 為我們推薦瞭如下一些: 

  • 快取函式的執行結果
  • 設定過期時間
  • 快取 IE 下載的檔案
  • 模板快取技術
  • Cache_Lite

由於 PHP 作為動態語言的特性,快取機制對於更新頻率並不快的站點來說非常重要。 

5. 使用 IDE, Templates 和 Snippets 加速 PHP 開發 – Chad Kieffer

當 Chad Kieffer 從 UI 設計和資料庫優化的工作中抽身出來的時候,他會在他的部落格 2 tablespoons 上分享很多技術經驗。由於 Chad 多方面的全面發展,他經常可以發現其他程式設計師不能發現的問題,並形成相關經驗,尤其是他開發網站的方法。他參與了網站開發的各個環節,因此他的建議對於提高網站開發的大局觀非常有用。 

Chad 認為使用 Eclipse PDT(Eclipse’s PHP development package) 這樣的 IDE,同時使用一些模板技術和開源專案可以有效地提高 PHP 的開發速度。 

緊湊的計劃,長長的 to do lists 以及 deadlines 讓開發人員非常苦悶。不過有些功能,比如 Eclipse Templates,可以有效減少編碼的時間和出錯的機率。

通常來說,任何專案都可以自動化,自動化程度越高, 你完成專案的時間就越短。花時間來開發使用頻率很高的框架和模板,將會節省你以後更多時間。同時,使用像Eclipse and the PDT package 這樣的 IDE,你會發現效率得到明顯提高,IDE 可以自動閉合,補全分號並且可以在本地 debug。 

6. 利用好 PHP 的過濾函式 – Joey Sochacki

或許 Joey Sochacki 並不像 Matt Mullenweg 那樣有名 ,但他也是一個經驗豐富的開發者,並且通過他的部落格 Devolio 分享了很多技術經驗 。

Joey 發現在編寫 php 程式碼的過程中有很多地方需要進行過濾,但卻並沒有太多的coder 關注 php 的內建過濾函式。 

過濾資料是我們經常需要做的事情,但是很多功能豐富的 PHP 內建過濾函式卻不為人知。使用類似 filter_* 的 PHP 內建函式,我們幾乎可以處理所有的過濾任務,包括資料型別驗證/URL/email和IP地址驗證/特殊字元處理等等。

過濾是一件複雜的事情,但是我相信 joey 的發現會給你很多啟發,讓你認識到 PHP 強大的過濾功能。 

7. 使用 PHP 框架 – Josh Sharp

對於是否應該使用 Zend, CakePHP, CodeIgniter, 或者 其他 PHP 框架,一直存在著很多爭議,但是在 web 開發者的心中,他們有自己衡量的標準。 

Josh Sharp 自己建立了一家提供麵包和黃油服務的網站,因此他對於使用 PHP 框架來開發網站有一定的經驗。他認為使用一個 PHP 框架來進行專案開發(use a PHP framework ),可以有效地節省時間,並且減少出錯的機率。為什麼?因為他覺得PHP實在是太好上手了。 

PHP 的易於使用有時候也有缺陷,因為並不嚴格的語法,經常會導致很多錯誤程式碼的誕生。但如果使用一個 PHP 框架,出錯的機率就會大大減少。

PHP 框架可以讓你的程式碼結構更加規範,並且節省大量時間。 

(PS:自己動手設計 PHP MVC 框架 by justjavac )

8. 不要使用 PHP 框架 – Rasmus Lerdorf

與 Josh 的觀點恰恰相反,PHP 的鼻祖 Rasmus Lerdorf 卻認為最好不要使用 PHP 框架,為什麼?因為不基於框架的PHP效能更好。Rasmus 在 Drupalcon 2008 的演講上,用 “Hello World” 的例子來對比了一些框架 PHP 和簡單 PHP 之間的效能,結果顯示框架 PHP 的效能要遠遠落後。 

9. 使用批處理 – Jack D. Herrington

Jack Herrington 對 PHP 世界並不陌生, 並且為大名鼎鼎的 IBM developerWorks 貢獻過超過 30 篇的專搞, 同時出版過《PHP Hacks》的書,因此他是一個真正的專家。 

Herrington 推薦使用批處理和 Cron 來代替那些可以執行在後臺的程式腳步,Web 使用者並不願意線上 等待你的處理過程,所以有些事情更適合放到後臺來處理。 

誠然,在某些情況下,這有點大材小用了,但是你可以清楚地看到,使用 Cron, MySQL, PHP 物件導向的方法以及 Pear::DB 這些便捷的工具來建立一個批處理工具並不是一件複雜的事情。

Jack 認為使用 cron, PHP 和 MySQL 在後臺處理一些任務,比起多程式的業務邏輯要划算得多。 

兩種方法我都嘗試過,我認為 Cron 非常符合 ”Keep It Simple, Stupid” (KISS) 的原則,它讓後臺處理變得簡單。與多程式的業務邏輯相比,它沒有記憶體溢位的風險。你可以建立一個簡單的批處理指令碼,並且在 cron 中執行,這個指令碼會定時檢查是否有任務需要處理,處理完之後就會自動退出,因此你不用擔心是否有程式卡殼,或者陷入死迴圈。

10. 及時啟用錯誤報告 – David Cummings

David Cummings 有一個專門提供 CMS 軟體服務的公司 ,並且獲得過幾次獎 ,他有非常豐富的 PHP 開發經驗。David 曾經寫過《two PHP tips he wished he’d learned in the beginning》,其中一點就是:及時啟用錯誤報告,這會節省大量的時間。 

我告訴人們,最重要的事情就是最大程度地開啟 PHP 的錯誤報告,為什麼?因為PHP 可能會隱藏很多小問題:

  • 變數沒有預定義
  • 在程式碼片段中引用了不可用的變數
  • 使用了未定義的常量這些因素看起來並不是什麼大事,除非你在使用物件導向的方法編寫一些類庫。通常,關閉錯誤報告將可能使你付出更大的成本來維護你的程式碼。

錯誤報告可以幫你輕易地找到程式碼的問題所在,如果錯誤報告的等級夠高,細微的錯誤都能被立即發現,幫助你節省整體 debug 的時間。 

英文原文:10 Principles of the PHP Masters

來自: lupaworld

相關文章