PHP 是一門復雜的語言,經過多年折騰,使其不同版本之間高度不一致,有時還有些 bug。 每個版本都有自己獨有的特性、多余和怪異之處,也很難跟蹤哪個版本有哪些問題。 這也就很好理解為什么有時它會遭到那么多的厭惡。
盡管如此,如今它還是 Web 開發方面最流行的語言。 因其悠久的歷史,對于實現密碼哈希和數據庫訪問諸如此類的基本任務你能夠找到很多教程。 但問題在于,5 個教程,你就很有可能找到 5 種完全不同的完成任務的方式,那么哪種是「正確」的方式呢? 其他方式有難以捉摸的 bug 或者陷阱? 確實很難搞明白,所以你經常要在互聯網上反復查找嘗試確認正確的答案。
這也是 PHP 編程新手頻繁地因為丑陋、過時、或不安全的代碼而遭到責備的原因之一。 如果 Google 搜索的第一個結果是一篇 4 年前的文章,講述一種 5 年前的方法,那么 PHP 新手們也就很難改變經常遭受責備的現狀。
本文檔通過為 PHP 中常見的令人困惑的問題和任務編輯組織一系列被認為最佳實踐的基本做法, 來嘗試解決上述問題。 若一個低層次的任務在PHP中有多種令人困惑的實現方式,本文也會涵蓋。
## 是什么
這是一份指南,在 PHP 程序員遇到一些常見低層次任務但不明確最佳做法(由于 PHP 可能提供了多種解決方案)之時,為其建議最佳實踐。 例如:連接數據庫是一個常見任務,PHP 中提供了大量可行的方案,但并不是所有的都是好的做法,因此,本文也會包含該問題。
本文包含的是一系列簡短的、入門性質的方案。 涉及的示例在基本設定下就能夠運行起來,你研究一下應該就能把它們變為對你有用的東西。
本文將指出一些我們認為是 PHP 中最新最好的東西。然而,這意味如果你在使用老版本的 PHP, 一些用來實現這些解決方案的特性對你并不可用。
這份文檔會一直更新,我會盡我最大努力保持該文檔與 PHP 的發展同步。
## **不**是什么
本文檔不是一份 PHP 教程。你應該在別處學習語言基礎和語法。
它也不是一份針對 web 應用常見問題,如 cookie 存儲、緩存、編程風格、文檔等的指南。
它也不是一個安全指南。當本文檔觸碰到一些安全相關的問題時,也是希望你自己做些研究來確保你的 PHP 應用的安全問題。 你的代碼造成的問題應該都是自己的過錯。
該文檔也并不是在主張一種特定的編程風格、模式或者框架。
也不是在主張一種特定的方式來完成高層次任務如用戶注冊、登錄系統等。 本文檔只限于 PHP 的悠久歷史所造成的一些易混淆或不明確的低層次任務。
它不是一個一勞永逸的解決方案,也不是一個唯一的方案。 下面要講述的一些方法對于你的特定場景來說也許并不是最好的,存在很多不同的方式來達到同樣的目的。 特別是,高負載 web 應用也許能從更加難懂的方案中獲益更多。