PHP 現在正在經歷著一場自己在編程語言中的文藝復興。通過增加一系列新的特性(比如 namespaces,traits,closures,build-in opcode cache 等),PHP 逐漸演變成一個現代化的腳本語言。同時,PHP的整個生態系統也在因此而轉變。PHP 程序員們不再過度依賴那些龐大而臃腫的框架,而是更多的去使用更加輕量級的專用組件。Composer 依賴管理工具也徹底改變了人們構建 PHP 應用的方式;它將我們從那些框架的圍墻中解脫出來,讓我們可以自由混搭各種可相互操作的組件,從而搭建出最能符合我們需求的 PHP 應用。當然,如果沒有 PHP Framework Interop Group 負責提出與優化的各種標準,那么這些組件之間的互操作性也是幾乎不可能實現的。
《現代PHP之路》可以當作是一份對 PHP 新特性的教程,它將向你介紹各種實用的社區標準,最佳實踐;并教會你如何利用這些知識和可互操作的組件來構建和部署不可思議的 PHP 應用。
PHP 的過去
在開始學習現代 PHP 之前,我們應該先了解一下 PHP 的起源。PHP 是一種服務器端的解釋型腳本語言。也就是說你寫好了 PHP 代碼,要將它上傳到服務器上,然后通過 PHP 解釋器來執行你的代碼。PHP 通常被用于像 Apache 或者 Nginx 這樣的 Web 服務器來提供動態的內容。當然,PHP 也可以被用來創建強大的命令行程序(就像 bash,Ruby,Python等等)。許多 PHP 程序員由于不了解這一點而錯過了好多讓人激動的功能。當然,這些程序員不包括你在內。:)
你可以通過官方網頁來了解 PHP 的歷史。在這里我不打算再重復已經被 Rasmus Lerdorf(PHP 之父)說過的話。我想說的是 PHP 有一個混亂的過去。PHP 最初是由 Rasmus Lerdorf 寫的一套簡單的 CGI 腳本,用來跟蹤訪問他主頁的人們的信息。Lerdorf 給他的這套腳本命名為 “個人主頁工具集”(Personal Home Page Tools)。這套代碼跟我們現在所說的 PHP 完全不同,甚至根本不能算是一種腳本語言,而只是一個簡單的工具,可以提供一些簡單的變量,自動解釋表單變量,并可以嵌入 HTML。
在1994年到1998年之間,PHP 經歷了數不清的改進,甚至還有好幾次完全推倒重寫。Andi Gutmans 和 Zeev Suraski,兩位當時還是 Tel Aviv 公司的程序員,也加入了 Rasmus Lerdorf 的隊伍,逐漸將 PHP 從一套簡單的 CGI 工具轉變成一個完整的編程語言,讓 PHP 有了比較統一的語法和簡單的面向對象支持。他們將最終的產品命名為 PHP3, 并在1998年下半年正式發布。這個新的命名跟之前的名字沒有什么聯系,而是 “PHP:Hypertext Preprocessor” 的遞歸縮寫形式。PHP3 是第一個長的有點像我們現在所說的 PHP 的版本。它對各種數據庫,協議和API有著卓越的可擴展性。PHP3 的這種可擴展性吸引了更多的開發者加入到這個項目中來。到1998年底,PHP 已經在全世界的 Web 服務器中占有了 10% 的份額。
PHP 的現在
現在,PHP 語言正在來自世界范圍的許多開發團隊的支持下快速發展。整個開發的流程也有了一些變化。在過去,一般的開發過程就是先寫好 PHP 代碼,將文件上傳到服務器,然后開始祈禱一切都能正常運行。這是一個很不好的開發流程,但是,在沒有可用的本地開發環境的情況下,也只能不得已而為之。
現在的開發流程使用版本控制工具取代了過去那種FTP的方式。使用 Git 這樣的版本控制工具可以維護一個具有歷史記錄的代碼庫,你也可以很容易的創建新的代碼分支或者合并不同的代碼分支。使用 Vagrant 這樣的虛擬化工具和 Ansible,Chef 或者 Puppet 這樣的自動配置工具可以虛擬出跟生產環境一致的本地開發環境。通過 Composer 依賴管理工具我們可以利用專用的 PHP 組件。我們的 PHP 代碼遵循 PSRs - 由 PHP Framework Interop Group 管理的社區標準。我們可以利用 PHPUnit 這樣的工具徹底的測試我們的代碼。我們將代碼部署在運行于像 nginx 這樣的 Web 服務器之后的 PHP FastCGI 進程管理器中。我們也可以通過 opcode 緩存來提升應用的執行效率。
同時值得一提的是,直到2014年,PHP 終于有了一份官方的語言規范草案。
Sara Golemon 和 Facebook 在 O‘Reilly 的 2014 OSCON 會議上宣布了第一份 PHP 規范草案。你可以在 PHP internals mailing list 中查看這份官方聲明,也可以在 Github 上查看 PHP 語言規范。
由于有多個 PHP 引擎的競爭,使得官方的 PHP 語言規范文件就顯得非常重要。最初的 PHP 引擎是 Zend Engine,它是用 C 語言寫的一個 PHP 解釋器,并從 PHP4 開始使用。Zend Engine 是由 Rasmus Lerdorf,Andi Gutmans 和 Zeev Suraski 創建的,它也是 Zend 公司對 PHP 社區的主要貢獻。不過,現在有了第二個主要的 PHP 引擎 - 由 Facebook 開發的 HipHop Virtual Machine。所以官方的 PHP 語言規范保證了這兩個引擎之間基本的兼容性。
PHP 的未來
Zend 引擎正在添加新特性和改進執行效率等方面快速發展,這可能是因為他們感受到了來自于 Facebook 的 HipHop Virtual Machine 引擎和 Hack 編程語言的競爭壓力。
Hack 是一個基于 PHP 的新的編程語言。它在保持了對 PHP 動態類型的向后兼容的同時,引入了靜態類型,新的數據結構和更多的接口。Hack 的目標群體是那些即喜歡 PHP 語言快速的開發效率,又希望用靜態類型帶來對程序的可預測性和穩定性的程序員們。
HipHop Virtual Machine(HHVM)是一個 PHP 和 Hack 的解釋器,它使用實時的 (just in time)JIT 編譯機制來提升應用的執行效率,并減少對內存的占用。
雖然并不能說 Hack 和 HHVM 即將取代 Zend 引擎,但是 Facebook 的參與在 PHP 社區引起了巨大的影響。更加激烈的競爭使得 Zend Engine 核心團隊不得不宣布 PHP7,一個優化的 Zend Engine,據說將可以與 HHVM 相媲美。
對于 PHP 開發者來說,這是一個讓人激動的時代。PHP 社區從來沒有像現在這樣有活力,充滿樂趣和有創造性。希望這個系列可以幫助大家更好的去認識現代 PHP。