PHP 7 已經發布,你會選擇PHP 7嗎?
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年Facebook為 HipHop編譯器揭開面紗。這款編譯器可以將PHP轉為C++程式碼,再轉為本地機器碼,用C++編譯器編譯。儘管這個想法很好,也改進了PHP的效能,但不實用,因為本地機器碼編譯PHP指令碼耗時太久。
之後Facebook換了另一種方法,他們開發了HHVM(HipHop Virtual Machine),透過JIT engine(Just In Time)將PHP程式碼轉換為本地機器碼。這使得所耗時間大大減少並且效能得到顯著改進。
很顯然,Facebook不滿意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”中討論過了。如果你很好奇,你可以追隨部落格音訊或者訂閱YouTube頻道來獲取關於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以及關鍵字的構造可能性,因為這些關鍵字應該在其他開發者開始使用之前被儲存。
此外,Facebook Hack語言也支援async and await。我猜測Facebook是想為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近期宣佈儘可能多的將程式碼(從php)移植到JavaScript,包括在伺服器端(從php)移植到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新特性有關的問題並收穫回覆,請在下方評論。
相關文章
- 這10條PHP7中的禁忌,你知道嗎?PHP
- Centos 7升級 PHP7 到 PHP8CentOSPHP
- PHP開發者應該學習、會用10個PHP7新特性PHP
- Use PHP7PHP
- 開發人員選擇 PHP 的原因PHP
- php7新特性PHP
- PHP7 新特性PHP
- 【深入 PHP】PHP7 的基本變數PHP變數
- PHP 5 與 PHP 7 的效能對比PHP
- centos7+安裝nginx+php7CentOSNginxPHP
- 《PHP7 開發寶典(第4版)》之“PHP介紹和PHP 使用物件”PHP物件
- Java 11已經發布Java
- 十個你需要在 PHP 7 中避免的坑PHP
- php7的新特性PHP
- CentOS 7 安裝PHP 5.4.16CentOSPHP
- php常用的7大框架PHP框架
- CentOS 7 安裝 PHP 7.2CentOSPHP
- 【深入 PHP】PHP7 底層執行機制PHP
- 利用 PHP7 的 OPcache 執行 PHP 程式碼PHPopcache
- ubuntu16.04 PHP7安裝與Nginx PHPUbuntuPHPNginx
- PHP7中php.ini、php-fpm和www.conf 配置PHP
- PHP7 編譯安裝PHP編譯
- centos7下安裝phpCentOSPHP
- CentOS 7 完全解除安裝PHPCentOSPHP
- 【深入 PHP】PHP7 陣列的底層實現PHP陣列
- PHP和Python如何選擇?哪個更有發展前途?PHPPython
- 【PHP7原始碼分析】PHP7原始碼研究之淺談Zend虛擬機器PHP原始碼虛擬機
- PHP 效能分析平臺搭建 (tideways + xhgui+ nginx + PHP7)PHPIDEGUINginx
- php7+的php-fpm引數配置,注意事項PHP
- python以後會取代php嗎PythonPHP
- PHP7效能優化筆記PHP優化筆記
- CentOS 7 yum 安裝 PHP7.3CentOSPHP
- php7版高效能onethik!PHP
- 一鍵安裝PHP7.xPHP
- 總結PHP 7新增加的特性PHP
- docker學習7:Docker 安裝 PHPDockerPHP
- Centos7下配置PHP + MySQL + Nginx開發環境CentOSPHPMySqlNginx開發環境
- Zend Studio使用教程:使用PHP 7進行開發(二)PHP
- Java併發(7)- 你真的瞭解 ReentrantReadWriteLock 嗎?Java