PHP 還有未來么,還是 25 歲就「壽終正寢」了?

作者 | BEN JAMES

譯者 | Arvin,責編 | 夕顏

出品 | CSDN(ID:CSDNnews)

1995年6月,拉斯穆斯·勒多夫(Rasmus Lerdorf)在Usenet小組中發佈了一則如下公告。公告至今還在,隨時可以閱讀。

公告:

正式發佈個人主頁工具(PHP工具)1.0版本。

這些工具是一組用C編寫的小巧緊湊的cgi二進制文件。

今天,25年過去了,PHP已經幾乎無處不在。我敢打賭,對於本文的大多數讀者來說,他們對Web編程的首次嘗試均涉及PHP。

但是,無論PHP擁有多麼豐富的歷史和廣泛的用戶基礎,都沒有理由在一個快速發展的領域中使用這門語言。雖然PHP將不可避免地在現有的應用程序中出現數年,但它在新站點中還會有未來嗎?

在展望未來之前,我們必須首先研究PHP在過去是如何發展的。

發端

Rasmus Lerdorf最初創建PHP是為了追蹤瀏覽過他在線簡歷的用戶。當源代碼發佈後,代碼庫被大量重寫,PHP就開始流行起來。據報道,到1998年,有1%的域名安裝了PHP。那時的PHP完全寫在標記中,語法明顯不同於現代版本。

Zeev Suraski和Andi Gutmans嘗試用PHP建立業務,但發現它在功能上很匱乏。他們與Rasmus合作,PHP再次被重寫並發佈了PHP 3.0版本。當時事情有了一些進展,預計有10%的域安裝了PHP 3。這也是PHP的含義從「個人主頁」變成人人喜愛的遞歸縮寫詞「PHP: Hypertext Preprocessor」的轉折點。這個版本和時期通常被視為PHP鞏固地位的時期。在PHP 3和4過渡時期,phpMyAdmin被創建。Zeev和Andi將他們的名字組合在一起,創建了PHP服務公司Zend,古老的大象徽標誕生。

剩下的就是經典的歷史了:PHP 4發佈後不久,Drupal出世。2003年出現了WordPress,2004年,哈佛大學一位名叫Mark的學生(FB創始人)聲名大噪。

FACEBOOK和PHP

Facebook是著名的PHP網站。但是,當成千上萬的用戶變成數以百萬計,數以百萬計的用戶向數十億用戶擴張時,就出現了成長的煩惱。

特別是,PHP過去是(現在仍然是)一種腳本語言。對於開發人員的生產率來說很好,但對於資源效率來說卻不然。因此,在2008年,Facebook開始從事HipHop for PHP(一種編譯器)的工作。很簡單,它解析PHP,將其編譯為C ++,然後將生成的C ++編譯為x64。鑒於PHP是弱類型且動態的,這不是什麼了不起的壯舉。但是結果不言而喻:CPU負載減少了50%。

我敢肯定,可以想像如果你 是Facebook的一名開發人員,使用這個程序會多麼可怕。對PHP代碼進行更改,運行解釋器,然後運行編譯器,再運行可執行文件,發現問題後返回修復。那是一個相當長的迭代周期,這就是為什麼Facebook還開發了HPHPi,這是一種解釋器,可以完成與解析器和編譯器 (HPHPc)相同的工作,但只是用於開發。可以想像,讓這兩個項目保持同步是件非常頭疼的事,因此在2011年,他們開發了HHVM(HipHop虛擬機)。

HHVM是一種PHP運行時。它使用JIT(即時編譯)來提供兩全其美的方法。這非常酷,如果你有興趣,可以在Facebook自己的博客文章中閱讀更多內容。

下一個重大進展是在2014年,出現了一種專門為HHVM構建的語言Hack。它既是PHP的超集又是其子集,添加了可選的類型注釋和諸如異步架構之類的附加功能。它還幫助HHVM的JIT更加高效,因為它可以通過使用指定的類型提示使HHVM的JIT放心地進行優化。很快,Facebook上的新代碼開始用Hack編寫,在往後的時間裏也把現有代碼向Hack轉化。Hack和HHVM都是開源的,現在都在積極維護。

Facebook發現原生形式的PHP無法大規模擴展的事實,是否意味着它是一種設計拙劣的語言?不,我不這麼認為。我不認為當時存在的選項是針對Facebook所需的規模或細節創建的。但是,這並不能阻止人們用PHP構建Facebook。

PHP的仇恨者

在廣闊的軟件社區中,隨着PHP的發展壯大,它不可避免地引來了越來越多的憤世嫉俗者的攻擊。不過,客觀地講,PHP比大多數其他語言更令人討厭。根據最近的2020 Stack Overflow開發者調查,PHP在最可怕的語言中排名第六。為什麼?

我不想在這裡討論技術細節,如果你感興趣,可以看看《PHP:糟糕設計的化身》,這篇文章簡直被PHP仇恨者奉為聖經。這篇博客寫於2012年,其所提及的一些問題此後已得到解決,但許多問題尚未得到解決。(例如:為什麼在2020年仍沒有本地異步支持?)

我認為PHP在語言哲學上的問題更大。這是一個用複雜方式實現的用於相當狹窄領域的工具。在理想情況下,如果應用程序必須是複雜的,那麼開發人員應該在用戶代中看到複雜性,而不是語言本身。你不需要用一個複雜的工具來創建複雜的項目。當我說PHP很複雜時,我並不是說它對初學者來說很難使用(事實上恰恰相反),我是說它有不一致的命名約定和許多非常具體的函數,這兩者都很容易產生錯誤,直到運行時這些錯誤才會暴露出來。但是,這些僅僅是PHP時代的屬性嗎?雖然這可能是一個因素,但肯定不是大家討厭它的原因。畢竟,Python創建於1989年,比PHP早6年,在Stack Overflow 調查中,它在最受喜愛的語言中排名第三,也是當今增長最快的語言之一。

Stack Overflow 2020調查:最可怕語言

當談到安全性時,關於PHP站點上超過平均水平的漏洞數量,是該語言的錯誤還是站點開發人員的錯誤,存在一些爭論。

一方面,為了吸引包括非程序員在內的廣泛人群而設計的編程語言,不管語言本身有什麼優點,這些人用幾十年前的教程編寫的代碼組合在一起創建網站,這種編程語言總是會遇到問題。另一方面, PHP試圖以令人費解的方式修復基本的安全問題,例如先用escape_string()修復SQL注入,然後通過添加real_escape_string()修復漏洞,再添加addslashes()、mysql_escape_string()、pg_escape_string()等等。將此添加到其複雜的錯誤/異常處理(是的,錯誤和異常是不同的)中,如果不熟悉語言的細微差別,那麼很容易出錯。運行過時、不受支持的PHP版本的站點數量的數量還將以驚人的速度繼續增長,因此在未來幾年裡,PHP站點仍將是黑客唾手可得的目標。

儘管如此,我不認為這門語言存在的問題有人們所說的那麼嚴重。儘管人們對PHP的抱怨有合理的理由,但在我看來,大部分的污名都是因為它很受歡迎而遭受的嫉妒,而不是什麼個人原因。

未來

本人深知在地址欄中使用post.php的頁面輸入對這門語言的評論,是很有諷刺意味的。但這與現有的網站無關。我認為即使是最熱心的用戶也不會建議我們重寫所有使用PHP創建的網站。問題是,在2020年,如果我想創建一個新網站,我應該考慮使用PHP嗎?

毫無疑問,當前的web開發趨勢正在為單頁面應用程序設定一個方向——在這種應用程序中,你的瀏覽器永遠不會重新加載,但是導航是通過Javascript使用API調用(例如:瀏覽GitHub或Google Drive)得來的數據重新呈現頁面來實現的,這樣的調用快得像閃電一樣。Javascript庫、框架和工具在瀏覽器中構建反應式和高性能應用程序的生態系統不斷增長,其中React和Vue最受歡迎。

歸根結底,PHP是用於服務器端呈現的。這對大多數網站來說是不錯的,也是大多數網站的最佳選擇。但是如果你要在2020年建造新的產品,你必須接受這一點將帶來的限制。雖然PHP風格的服務器端渲染還沒有死(大家是不是都忘了SEO了?),但是現代的網站很可能是同構的,也就是說,能夠在服務器和客戶端渲染相同的Javascript,使用諸如Next.js(用於React)或Nuxt.js(用於Vue)等框架,能夠將PHP從服務器端清除。

但是我們不能忽視PHP也在不斷發展的事實。Laravel自詡為「web工匠的PHP框架」,它提供了一種MVC架構,用於安全快速地創建PHP應用程序。受到社會的高度重視,它的發展積極迅速。此外,PHP 8也在今年8月推出,帶來一大堆新特性(其中許多特性和Facebook章節中介紹的類似),比如JIT、Union類型和改進的錯誤。

最後,祝PHP 25歲生日快樂,雖然PHP古怪得很,將來很長時間也將保持這份怪異。你給了很多人力量,並在web的崛起中發揮了關鍵作用。但是,如果人們到別處尋找未來,你也不要太沮喪,畢竟現在都2020年了。

本文為CSDN翻譯文章,轉載請註明出處。

https://hackaday.com/2020/06/29/does-php-have-a-future-or-are-twenty-five-years-enough/