PHP迸发,PHP 开发 「十宗罪」
前言
本文翻譯自 10 Things Not To Do In PHP 7。全文列出了十條我們在 PHP7 開發中應注意避免的 反模式,覺得很有參考意義故翻譯成中文供大家學習借鑒。
1. 不要使用 mysql_ 函數
在 PHP7 中,mysql_ 系列函數已經完全從核心代碼中移除,你應該用改進過的 mysqli_ 系列函數(mysql improvement)來替換 mysql_ 代碼。或者你也可以使用更具靈活性的 PDO 來重構你的程序。
2.不要寫慢代碼
PHP 7 中速度顯著的增加可能會使你忽略一些糟糕的拖慢程序速度的代碼,不要因為切換到 PHP 7 了而對這些問題漠不關心。
要了解網站速度的重要性以及如何讓網站速度變得更快,請閱讀 Beginners’ guide to speed optimization 以改進你的代碼。
作為開發人員,你應該始終確保只在需要時才加載腳本,編寫高效的數據庫查詢,盡可能使用緩存來加速訪問等等。
3.不要在文件末尾添加 PHP 閉合標簽
如果你閱讀過 wordpress 源碼,你就會發現大部分 PHP 文件末尾都省略了 PHP 閉合標簽。而在 Zend 框架中特別 指明 禁止在文件末尾使用閉合標簽。PHP 并不強制要求你添加閉合標簽,在文件末尾省略它可以確保不會無意中添加額外的空格。
4.不要使用傳遞引用
我個人不喜歡使用傳遞引用。但在某些情況下傳遞引用是十分有用的,可是在大多數情況下,它會使代碼更難閱讀和理解,而且會出現難以預料結果。有些人認為使用引用可以使他們的代碼更快,但實際上這是錯誤的。
在 PHP 中使用傳遞引用的一個糟糕的例子可能就是 shuffle() sort() 函數。它們不是返回一個隨機排序或排序過的數組,而是修改原來的數組,這在我看來是完全不合邏輯和反人類的。
5.不要在循環中執行查詢
在循環中執行數據庫查詢完全就是在浪費資源。它會給服務器帶來不必要的壓力(譯者注:循環中執行查詢會導致 N+1 問題),并且你完全可以在循環之外得到相同的結果。當遇到這種情況時,你往往可以用兩個單獨的查詢來得到一個結果數組,并對結果數組進行循環獲取數據,并不需要在循環中執行查詢。
解決這個問題的最好方法就是閱讀函數文檔并監控查詢語句是否出現 N+1 問題。
6.不要在 SQL 查詢中使用 *
在任何情況下,特別是數據庫中包含大量列時,如果可以避免使用通配符,則不要在 SQL 查詢語句中使用通配符。指明你想獲取的數據列,能最大限度地減少資源的使用,保護你的數據并使代碼邏輯清晰。
在寫 SQL 語句時,盡量測試所有可能的實現并比較它們的速度。例如,使用 SQL 函數來計算平均值,總和而不是使用 PHP 函數來實現。
7.不要信任用戶的輸入
千萬不要相信任何用戶的輸入!對用戶所有的輸入你都需要過濾,轉義,檢查。用戶的輸入很有可能是某些居心莫測的人惡意輸入的帶有 SQL 注入,XSS 惡意攻擊的代碼。
確保在使用數據庫時,使用像 filter_var() 這樣的內置函數來檢查以及轉義用戶輸入的值。
8.不要聰明反被聰明誤
你的目標應該是寫出優雅的代碼,并清晰的表達你的意圖,而不是炫耀你寫代碼的能力。你可以通過使用多級三元表達式或其他一些特別的技巧方法如通過將所有變量名變為單字母,從而使每個頁面的加載時間減少 0.01秒。但日后你的代碼將使你和你的同事花費數倍的時間去理解和維護。
恰當的命名你的變量,為每一行必要的代碼寫明注釋,使用清晰的邏輯和面向對象方式書寫代碼。今天你花費在這些上面 “不必要” 的時間,在將來必將節省你數倍的維護時間并使你倍加感恩。
9.不要造輪子
PHP 已經有很長的歷史了。在大多數情況下,你的需求往往都已經有人做出了實現。不要嘗試去造輪子,造輪子前請先在 Github,Composer,Packagist 上搜索是否已經有相關的包。
從日志記錄到取色器,從性能檢測到單元測試,從微信接口到短信發送 API,只需要你閱讀這些包的文檔并簡單的寫幾行代碼就能完成需求,而不必大費周折自己寫一個輪子。
10.不要忽略其他語言
雖然你是一個 PHPer,但你至少也要了解HTML,CSS,Javascript和 MySQL 的基本知識。
我也建議你學習有關面向對象的知識,它會使你的代碼更優雅更賦予表達力。它也會為你打開學習 C#, Java 這類面向對象語言的大門。
學習包管理器,構建腳本,Coffeescript,LESS,SASS,YAML,模板引擎和其他工具來擴大你的知識面。衷心推薦你看看其他框架,特別是Ruby on Rails。
當你對這些知識都比較熟悉,那你也可以考慮考慮學習Typescript,Rust,Kotlin,Golang。
你往往會認為學習一門其他語言沒有必要,這是因為在工作中用不到而且跳出了你的舒適區。但是每種語言都有它獨特的東西值得你學習,這些不同思維編程語言的碰撞會讓你對編程有更深的體會和感悟,并能讓你在日后的編程中迸發出不一樣的火花。所有頂尖 PHP 開發者絕對不會只熟悉 PHP 這一門語言。跳出你的舒適區,打破你的偏見,帶著開放的眼光去看看外面的編程世界。
(譯者注:這一點感受很深。PHPer 被黑的很慘的一個重要的原因就是很多 PHPer 基礎并不是很好,往往只局限于PHP 這一門語言。建議大家有空多補補計算機相關基礎,并多學習學習其他語言。并不止是職業上的考慮,扎實的基礎和開闊的眼界往往能讓你寫出更好的代碼。Laravel 這個框架也是作者借鑒了許多別的語言的精粹才寫成的。他山之石,可以攻玉,共勉之!)
本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
總結
以上是生活随笔為你收集整理的PHP迸发,PHP 开发 「十宗罪」的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java pojo 转 map_JSON
- 下一篇: bt709和srgb_选择用于多用途视频