原文:10 Things Not To Do In PHP 7php
譯者:飛龍html
協議:CC BY-NC-SA 4.0mysql
mysql_
函數這一天終於來了,今後你不只僅「不該該」使用mysql_
函數。PHP 7 已經把它們從核心中所有移除了,也就是說你須要遷移到好得多的mysqli_
函數,或者更靈活的 PDO 實現。laravel
這一條可能易於理解,可是會變得愈來愈重要,由於 PHP 7 的速度提高可能會隱藏你的一些問題。不要僅僅知足於你的站點速度,由於遷移到 PHP 7 才讓它變快。git
爲了理解速度有多重要,以及如何把事情作得更好,請看一看咱們的文章速度優化入門指南。程序員
做爲一名開發者,你應該老是確保按需加載腳本,儘量鏈接它們,編寫高效的數據庫查詢,儘量使用緩存,以及其它。github
你能夠看一看,當一個文件以 PHP 代碼結尾時,WordPress 多數核心代碼都把末尾的 PHP 標籤去掉了。實際上,Zend 框架特別禁止了它。PHP 並不須要文件末尾的閉合標籤,而且咱們能夠經過去掉它來保證不會在後面添加任何的空白字符。sql
我我的不喜歡引用傳遞。我知道有時候它很實用,可是其它狀況下它使代碼變得難懂,而且更難預測結果。數據庫
聽說一些人認爲它使代碼運行更快,可是根據一些 PHP 高級程序員所說,這並不正確。編程
說明引用爲何很差的一個例子是,PHP 內建了shuffle()
和sort()
。它們修改原始數組,而不是返回處理後的數組,這很不合邏輯。
在循環中執行查詢很是浪費。它給你的系統施加沒必要要的壓力,而且可能可以在循環外部更快得到相同結果。當我遇到須要這樣的狀況時,我一般會使用兩個分離的查詢來解決問題,我會使用它們來構建數據數組。以後我會遍歷數組,並不須要在這個過程當中執行查詢。
因爲 WordPress 適用於這裏,它可能有一些例外。雖然get_post_meta()
會從數據庫獲取大量數據,若是你正在遍歷某個特殊博文的元數據你能夠在循環中使用它。這是由於當你第一次調用它的時候,WordPress實際上會獲取全部元數據並緩存它們。後續的調用使用這些緩存數據,沒有數據庫的調用。
弄懂這些的最佳方式是閱讀函數文檔,以及使用相似 Query Monitor 的工具。
*
固然,這個更像 MySQL 的問題,可是咱們習慣在 PHP 中編寫 SQL 代碼,因此都差很少。不管如何,若是能夠避免的話,不要在 SQL 查詢裏使用通配符,尤爲是數據庫有不少列的時候。
你應該明確指定須要哪些行,而且僅僅獲取它們。這有助於減小所用資源,保護數據,以及讓事情變得儘量清晰。
對於 SQL,你須要瞭解全部可用的函數,而且儘量測試其速度。在計算均值、求和或計算相似數值時,要使用 SQL 函數而不是 PHP 函數。若是你不肯定某個查詢的速度,測試它而且嘗試一些其它的編譯 -- 以後使用最好的那個。
信任用戶輸入是不明智的。始終校驗、過濾、轉義、檢查並留好退路。用戶數據存在三個問題:咱們開發者並無考慮每種可能性,它一般不正確,以及它多是蓄意破壞。
通過周密考慮的系統能夠防禦這些威脅。要確保使用相似filter_var()
的內建函數檢查適當的值,以及在處理數據庫時轉義(或預編譯)。
WordPress 擁有一些函數來解決問題。詳見文章校驗、轉義和過濾用戶數據。
你的目標應該是編寫優雅的代碼,來更清晰地表達你的意圖。你可能可以經過將任何東西縮短爲一個單詞的變量,使用多層的三元邏輯,以及其它手段,從每一個頁面中優化 0.01 秒。但這隻會給你和你周圍的人產生大麻煩。
合理命名變量,爲代碼編寫文檔,優先選擇清晰而不是簡潔。甚至還能夠更好,使用標準的面向對象代碼,它自己或多或少就是文檔,不須要一大堆內聯數值。
PHP 到如今爲止有很長時間了,網站被造出來的時間更長。極可能不管你須要造出什麼,一些人以前早就造出來了。不要懼怕向他人尋求支持,Github是你的好朋友,Composer也是,Packagist也是。
從日誌工具到調色工具,從性能分析器到單元測試框架,從 Mailchimp API 到 Twitter Bootstrap,每一個東西均可以經過按下按鍵(或者敲下命令)來獲取,使用它們吧!
若是你是個 PHP 程序員,如今有個好機會去至少了解 HTML、CSS、JavaScript 和 MySQL。當你可以更好地處理這些語言時,就是從新學習 JavaScript 的時機了。JavaScript 並非 jQuery,你應該合理地學習 JavaScript 來更高效地使用它。
我也打算向你推薦學習面向對象的 PHP,它能夠節省時間,而且在代碼規模更大時會變得更好。對於相似 C# 和 Java 的語言,在你瞭解 OOP 以後,它們也更易於理解。
經過了解包管理器、構建腳本、CoffeeScript、LESS、SASS、YAML 、腳本引擎和其它強大的工具來擴展你的知識面。我強烈向你推薦看一看其它框架,尤爲是 Laravel。
當你使用它們出色完成任務時,學習 Ruby、RoR、Android、iPhone 和 Windows Phone 應用開發如何?你可能會認爲這毫無心義,由於它們在你的溫馨區和工做所需範圍以外,可是這就是它們的意義。每種語言都有一些要學習的實用的東西,以及從沒碰到的新知識。全部 PHP 頂級開發者都懂得不少其它編程語言,這並不是偶然。