PHP 7終于發布:開發者會選擇PHP 7嗎?
英文原文:PHP 7 Release Date Arrived: Will Developers Adopt PHP 7?
大家可以通過閱讀本文,學習關于 PHP7.0 的五個方面的內容:PHP7.0 簡介、主要新特性、過去幾周關于程序員是否采用 php7.0 的意愿調查結果、以上調查結果的分析、以及對 PHP 未來版本的期待。
(一)PHP 7 簡介
PHP 7 是 11 年來首次發布的 PHP 主版本,PHP 上一次發布主版本是在 2004 年 ,當時發布的是 PHP 5.0.0。
與這次 PHP 核心開發人員沉睡已久不同,PHP 6 曾立志要讓 PHP 支持 Unicode 字符串。然而開發停滯不前,PHP 6 計劃在 2010 年被取消了。
自那以后雖然也有一些帶著重要新特性的 PHP 版本發布,比如 PHP 5.4,但沒有哪個真正稱得上主版本。
直到 2010 年 非死book 為 HipHop 編譯器揭開面紗。這款編譯器可以將 PHP 轉為 C++ 代碼,再轉為本地機器碼,用 C++ 編譯器編譯。盡管這個想法很好,也改進了 PHP 的性能,但不實用,因為本地機器碼編譯 PHP 腳本耗時太久。
之后 非死book 換了另一種方法,他們開發了 HHVM(HipHop Virtual Machine),通過 JIT engine(Just In Time)將 PHP 代碼轉換為本地機器碼。這使得所耗時間大大減少并且性能得到顯著改進。
很顯然,非死book 不滿意 PHP 的特性,于是在 2014 年啟動 Hack 項目,它源于 PHP 語言卻有著很多 PHP 沒有的特性,比如對所有數據類型都進行更嚴格的類型檢查,以及支持內置異步編程。
不久后 Zend 的 Dmitry Stogov 發布了 PHP 的一個名為 PHPNG 的分支。
(二)PHP 7 的主要新特性
PHPNG 的初衷是做調查,調查 JIT engine 的引入將對基于 PHP 版本的 Zend Engine 有何影響。然而,隨著進一步的研究他發現,其他方面的改進能讓 PHP 代碼運行得更快。
PHPNG 是 PHP 7 的基礎,起名叫 PHPNG 是為了避免與被取消的 PHP 6 混淆。
PHP7 新增的其他功能包括:標量值的嚴格類型、匿名類、嵌套類、編譯 PHP 引擎的可能性以及特定程序優化,好比 Wordpress 使用了 Performance Guided Optimizations (PGO)。
PHP 7.0 本來計劃在 10 月發布,但是因為一些嚴重的 bug 所以推遲到了十二月。
(三)PHP7 接受程度調查結果分析
PHP 7 的發布是 PHP 世界近年來最令人激動的事之一,因為對其功能有太多的期待,比如上文提到的那些。
許多開發者迫不及待地使用 PHP7,但不是每個人都能正確地使用它。接下來這個調查就是用于評估 PHP 程序員是否愿意采用 PHP 7。
調查主要圍繞三個問題:
- 你是否打算在你的生產中使用 PHP 7?
- 你是否打算在你的開發環境中使用 PHP 7?
- 你生產中所使用的最新版的 PHP 是哪個?
526 位開發者參與該調查,所以以下結果應該能代表許多 PHP 程序員的真實反應:
1. 你是否打算在你的生產中使用 PHP 7?
| 是的,從 7.0.0 的第一個穩定版上線之前我就開始用了。 |
21 |
4% |
| 是的,我打算在官方 7.0.0 版本發布后使用。 |
104 |
19. 8% |
| 是的,我將會在官方發布幾周后使用。 |
196 |
37. 3% |
| 不一定,取決于我的客戶。 |
44 |
8. 4% |
| 不會,不會很快就用,因為遷移代碼需要太多時間。 |
58 |
11% |
| 不會,我只打算在將來的項目中使用。 |
64 |
12. 2% |
| 不會,除非我的公司強迫我使用,并且不再提供舊的版本。 |
20 |
3. 8% |
| 其他 |
19 |
3. 6% |
2. 你是否打算在你的開發環境中使用 PHP 7?
| 是的,我一直在使用著。 |
41 |
7. 8% |
| 是的,為了測試它的新特性,我試了幾次。 |
60 |
11. 4% |
| 是的,只要官方 7.0.0 版本發布我就會開始使用。 |
218 |
41. 4% |
| 是的,我將會等待幾周至幾個月,直到我有更多的時間去檢查它 |
112 |
21. 3% |
| 這取決于我的客戶 |
11 |
2. 1% |
| 不會,現在不會使用,我只計劃在將來的項目中使用 |
62 |
11. 8% |
| 不會,除非我的公司強迫我使用它,并且我需要修改我的代碼 |
13 |
2. 5% |
| 其他 |
9 |
2. 7% |
3. 你生產中所使用的最新版 PHP 是哪個?
| PHP 7.0 |
10 |
1. 9% |
| PHP 5.6 |
299 |
56. 8% |
| PHP 5.5 |
111 |
21. 1% |
| PHP 5.4 |
59 |
11. 2% |
| PHP 5.3 |
38 |
7. 2% |
| PHP 5.2 |
5 |
1% |
| PHP 5.1 |
0 |
0% |
| PHP 5.0 |
1 |
0. 2% |
| PHP 4 |
0 |
0% |
| 其他 |
3 |
0. 6% |
(四)PHP 7 調查結果分析
從第一個問題可看出絕大多數程序員不是早期使用者。他們想使用 PHP 7 但需要過一段時間等 PHP7 穩定后再用。
盡管有 8 個候選發布版本,并且 PHP 測試小組評估 PHP 通過全部測試的可能性很大,但開發者也知道應該會有些 bug 和向后不兼容的更改存在,這些會導致程序員花費相當長的時間,用于 PHP 的最終修復或者基于開發者需要去修改代碼。
另外,還有一部分的程序員只想在新項目中使用 PHP 7,因為目前正在進行的這些項目非常重要,因此不能被 PHP7 可能出現的錯誤影響。
第二個問題是關于 PHP 程序員對 PHP 7 的好奇心有多重。結果顯示大部分程序員愿意在開發環境中測試 PHP 7,因為這樣更安全。
程序員們已經能夠想象一旦他們的代碼出現問題,等待他們修復的工作量該是多么的驚人,尤其是那些自己擁有測試套件的程序員,因為他們可能已經看到有很多的測試顯示失敗。
第三個即最后一個問題,顯示了程序員們正在使用的 PHP 版本有多新。
有一小部分的人正在勇敢地在生產中使用 PHP 7。雖然我認為他們不大可能在非常重要的項目中使用 PHP 7 開發。
數據顯示了個好消息,絕大部分程序員已經開始使用 PHP 5.6 了。而且在最壞的情況下他們仍然使用 PHP 5.3。這有可能是因為他們的公司不提供其他的版本,或者是因為新版本不適用于他們的代碼。
如今幾乎每個人使用的版本都不低于 PHP 5.3.11,因為更老的版本里有致命的 bug,這些可能會導致你的服務器崩潰。
也許你很好奇那 3 位選擇“其他”的開發者使用的是什么,事實上只有一位準確說了正在使用的是 HHVM。為了使用 HHVM 你需要控制你的托管環境并且需要手工編譯它。然而,絕大多數程序員不可能這么做或者沒這技術。
(五)PHP 7 的未來
現在 PHP 7 已經正式發布了,你也許會很好奇下一步是什么。以下是一些已在計劃內以及我們猜想的特性。
一些新特性的計劃我們已經在“Lately in PHP Podcast”中討論過了。如果你很好奇,你可以追隨博客音頻或者訂閱 油Tube 頻道來獲取關于 PHP 的最新功能的討論。
1. PCO 是加密的 PDO
我們已經知道的是會有一個抽象擴展,名為 PCO,這個類似于 PDO 但是有密碼。
2. PHP 靜態代碼分析器
Rasmus Lerdorf 還開發了一個工具叫 PHAN,這是個 PHP 靜態代碼分析器。目的是僅通過分析你的 PHP 代碼而不去運行代碼,就檢測出可能存在的 bug。該工具利用了 PHP 7 中新的 AST(抽象語法樹)擴展。
3. 帶 async and await 的異步編程
另一種可能性是,PHP 使用 async and await 構造,以提供更好的內置異步編程支持。這使你能夠在同一個腳本中運行多并行任務,而不需要等一個任務執行一個任務。
請不要將異步編程與多線程編程混淆。PHP 已經可以使用 pthreads extension.執行多線程編程了。
Async and await 構造最大的優勢是不再需要你處理 callback hell。這意味著如果你需要等待一些異步操作,比如訪問文件系統、數據庫或遠程服務器,你只需要使用等待關鍵字,那么異步操作完成后,腳本將會繼續操作下一個語句。
Async and await 構造關鍵字需要 PHP 有一些重要的改變,因為它需要處理內部事件循環。然而,PHP 開發者已經開始討論,實施 async and await 以及關鍵字的構造可能性,因為這些關鍵字應該在其他開發者開始使用之前被保存。
此外,非死book Hack 語言也支持 async and await。我猜測 非死book 是想為 PHP 程序員帶來具有 async and await 功能的 PHP。
也許你懷疑 PHP 需要這些構造的必要性,但是一旦你了解他們的優點后,你就會知道他們的重要性。
很多程序員轉移到 Node.js,因為 Node.js 支持異步編程。Node.js 目前還不支持 async and await 關鍵字,但也只是時間問題,因為 async and await 也是 EcmaScript 7 的新特性之一,而且將來的 Node.js 將使用基于 EcmaScript 7 的 JavaScript。
這樣的發展被認為更重要。尤其是最近 WordPress 宣布將盡可能刪減 JavaScript,包括服務器端的 Node.js 和 React 框架。
顯然這是他們對服務器最大利用化的一步,該服務器托管著 Wordpress.com blogs。我不知道 WordPress 社區是否會接受這項目,因為有成千上萬的插件依賴于 PHP。
4. 獨立的 Web 服務器
PHP 有一個獨立的 Web 服務器,但不推薦給生產環境。
一旦 PHP 支持內置異步編程,那用它開發 HTTP Web 服務將更容易,哪怕用純 PHP 編寫,就像是在用 Node.js 一樣。
這使得 PHP 的功能更靈活,處理并行請求更高效使用更少內存,尤其是在合并異步編程和基于 pthreads 的多線程編程后之后。
(六)總結
PHP 7 是巨大的飛躍,但世界在不停旋轉,因此 PHP 也必須跟上新趨勢,比如上文提到的那些。
我們還是要祝賀所有付出時間和精力的開發者,因為是他們使 PHP 如此優秀,比如 PHP 7。
如果你喜歡本文,或者想問一些和 PHP 7 新特性有關的問題并收獲回復,請在下方評論。
譯者/王葦棋審校/林煬責編/仲浩
譯者簡介:王葦棋,碩士畢業于香港浸會大學,關注數據挖掘和信息安全。