「PHP」為什么開發人員討厭 PHP?
首先說一句,“PHP 是世界上最好的語言。”懂的都懂,這是一個有歷史的、承載了程序員黑色幽默的梗。但是,這些年以來,“PHP 已死”、“PHP 行將消亡”之類的言論甚囂塵上,由此看得出,很多開發人員討厭 PHP。這又是為什么呢?PHP 真的就這么令人討厭嗎?答案是:No!
PHP 是世界上網站使用最廣泛的語言,也是最討厭的語言。而且人們對它的恨,是純粹的恨。為什么會有如此多的開發人員對它恨之入骨呢?今天就讓我們來談談仇恨的源頭,看看它是否真的讓人如此憎恨。
別碰我的 PHP
如果我說,全世界的開發者都很討厭 PHP,這并非我的一家之言。在最新的 Stack OverFlow 調查中,來自世界各地的開發者將 PHP 列入最討厭的語言前五名。而最新的 Hired 調查顯示,PHP 位居最討厭的語言前兩名。還有很多類似的調查結果,我甚至都不想提 Reddit 上人們是怎么看待 PHP 的。如果你是有著 20 年經驗的 PHP 開發人員,來這里就是為了把我釘在 Symfony(一款基于 MVC 架構的 PHP 框架)的祭壇上,請放松! 我們是來聊天的,請把槍放下,好吧?現在,恰恰相反,如果你對 PHP 深惡痛絕,那就吃點爆米花,找個舒服的姿勢坐下來,跟我們一起聊聊。
話說很久之前,我自己也在做一些 Symfony2。而且我也很喜歡 Symfony 這個玩意兒,說實話,這玩意兒還挺好使的。我把這事兒告訴了一名開發人員,他是我在一次 DevOps 會議上認識的哥們。但我萬萬沒想到,他會如此震驚,感覺都快要嘔吐了,我忘不了他看我的眼神,就好像我屠殺了一名新生兒似的。為方便起見,從現在開始,我就姑且稱他為 James。于是,我馬上問 James 一個問題,為什么對 PHP 如此憎恨呢?
PHP 過往的混亂
要想了解接下來的內容,你需要結合一些背景知識。為做到這一點,讓我們稍微回顧一下。那是 1994 年, Rasmus Lerdorf (1968 年 11 月 22 日出生于格陵蘭島凱凱塔蘇瓦克的程序員,擁有加拿大國籍。他是編程語言 PHP 的創始人,其中 PHP 的頭兩個版本是由他編寫,后來他也參與 PHP 后續版本的開發)正在快速地編寫一個 C 工具套件。這套工具用來管理他的個人網站。Rasmus 當時只是為了解決自己的需求才開發的。他也從來沒有想過把它變成一種編程語言。這個工具套件中并沒有任何東西是為了成為工具而設計的。一年后,Rasmus 發布了這個當時被稱為 PHP/FI 的開源工具包,看起來是這樣的:
- <!--include /text/header.html-->
- <!--getenv HTTP_USER_AGENT-->
- <!--ifsubstr $exec_result Mozilla-->
- Hey, you are using Netscape!<p>
- <!--endif-->
- <!--sql database select * from table where user='$username'-->
- <!--ifless $numentries 1-->
- Sorry, that record does not exist<p>
- <!--endif exit-->
- Welcome <!--$user-->!<p>
- You have <!--$index:0--> credits left in your account.<p>
- <!--include /text/footer.html-->
與你今天在龐大的 PHP 7 框架中使用的東西相去甚遠,不是嗎?然而,所有這一切都來源于此。接下來的故事是這樣的:1997 年,代碼被一個開發團隊接管,當年發布了 PHP/F12。1998 年,代碼一部分被重寫,發布了 PHP 3。1999 年,PHP 的核心被完全重寫,發布了 Zend。第二年發布了 PHP 4。2004 年,PHP 5 與 Zend 2 一起發布。PHP 6 被取消了,因為此時的 PHP 開發已經變成了人間煉獄。最后,通過對該語言進行又一次的重大重寫:2015 年,發布了 PHP 7。我記得當時我非常激動。但最初,Rasmus 只不過是編寫自己的東西而已。2004 年,他曾接受過一次采訪,講述了一些不可思議的事情。
我真的不喜歡編程。我開發這個工具的目的,就是為了減少編程的工作,這樣,我就可以簡單地重用那些我不知道如何停止的代碼,我從來也沒有打算過要編寫一種編程語言 [……]。實際上我根本就不知道要如何編寫一種編程語言,我只是不斷地添加下一個邏輯步驟。
不一致且設計糟糕
回到 2019 年,我和朋友 James 一起參加聚會。在聚會上他就立即跟我吐槽起 PHP “惡心” 的語法。這門語言是如何沒有類型的,這門語言是如何變幻莫測的。無論是操作符的使用,還是函數的命名,都存在令人難以置信的不一致性問題。我就不給你一一列出 PHP 的問題了,要不然,這篇文章就會變得奇長無比,占用你一整天的時間才能閱讀完畢。
如果你真想知道這一切,那么我就會發現你是世界上最討厭 PHP 的人。不,其實我覺得最討厭 PHP 的人就是他自己。所有這些帖子都驗證了 James 曾對我說過的話。開發者之所以討厭 PHP,是因為它是一種技術上不一致、設計糟糕的編程語言。當你將它和其他編程語言進行比較時,這對比就顯而易見了。如果你讀完這兩篇文章后,還不承認 PHP 的確存在一些問題的話,那就是因為 PHP 已經成為你的信仰。而我也不會試圖去說服 PHP 狂熱分子。
使用 PHP,很容易產生糟糕的代碼。而其他編程語言的限制就更多了。我們還看到 PHP 存在很多安全問題。而這里的問題也是一樣的。使用 PHP 也很容易產生槽糕的、不安全的代碼。但并不是說,只要你編寫出正確的代碼,PHP 就不是一個安全漏洞,也不會注定出現難看的代碼。開發人員之所以討厭 PHP,是因為使用一種允許如此多自由的語言中,更容易出錯。
PHP 成功的犧牲品
在這種環境的仇恨還有一個重要因素。開發人員討厭 PHP,是因為它無處不在。我這個博客就是在 PHP 7 上運行的。像大多數網站一樣,我只需托管一個動態頁面,然后將其緩存。PHP 就可以勝任這項工作。是的,語言本身并非最好。是的,我可以使用高超的技術棧。但誰在乎呢?PHP 以一種快速而方便的方式滿足了我的需求。也正是因為這個原因,80% 的網站都是用 PHP 運行的。
當我向 James 解釋同樣的事情時,他就開始發瘋。就和你我一樣,James 也有朋友和家人。這些人經常就專業和個人網站的問題向他尋求幫助。這些人的網站經常是用什么語言寫的,你猜猜?于是,James 發現自己不得不經常修改 PHP 中的內容,他經常為此感到頭疼。
隨著 WordPress 的出現,它在互聯網上占據了主導地位,James 將在很長一段時間內使用 PHP。順便提一下,我跟你說的這種語言好像只能處理像我這樣的博客,但顯然事實并非如此。Facebook、Wikipedia、Yahoo!、Flick、Tumblr 等所有這網站都是用 PHP 運行的,每個月都毫無畏縮地迎接數以百萬計的用戶。PHP 在這方面做得非常好,而且也已經做了很長時間。
未來已成定局的老人
十年來,你一直聽到 PHP 即將消亡的消息。但 PHP 一直都健在。盡管有時間和最新的架設技術,它依然紋絲不動。開發人員討厭 PHP,是因為它與那些炒作驅動的開發背道而馳。在一個人人都迅速投資最新事物的行業里,PHP 就像一個不想出售土地的老人,一個繼續傲慢地跳舞的老人。

我和 James 的討論照常進行,突然間,他告訴我一些完全令人震驚的事情。“PHP 是迄今為止你所能找到的最慢的 Web 語言。”當他這樣說的時候,我就知道他已經很長時間沒有讀過任何有關 PHP 的東西了。
PHP 的發展,并不在于聲譽
在許多開發者的心目中,PHP 一直停留在版本 4。當這門語言不穩定時,具有災難性的性能,且不存在的面向對象進程設計。開發人員討厭 PHP,是因為他們認為這門語言已經停滯不前有 20 年了。當你今天去了解 PHP 時,你就會知道它已經遠遠超過當年的 PHP 4 了。PHP 7 比 Python 和 Ruby 都要快。如果你愿意的話,PHP 7 也可以做到強類型。隨著近年來出現的靜態解析器,工具也在不斷發展。像 Symfony 或 Zend 這樣的框架強制采用良好的實踐。每年都會發布一個新版本,并附有非常精確的議程。此外, PHP 7.4 具有更好的性能。還是那句話,由于篇幅所限,我不會贅述現代 PHP 正在發生的一切。如果你想知道所有的事情,我推薦你閱讀這篇文章《 2019 年的 PHP 》(PHP in 2019):是時候改變你對這門語言的看法了,它已經和過去沒有任何關系了。
開發人員討厭 PHP,是因為討厭 PHP 很炫酷。這門語言也是正因為此而聲譽一直不佳。是的,留下了很強的后遺癥,也存在很多問題。但對于大多數網站來說,還是有很多好東西的。
結語
大多數討厭 PHP 的開發人員之所以討厭 PHP,是出于優越感或無知。但不管怎樣,這都是愚蠢的。你必須根據自己的需要選擇一種技術。PHP 在許多場景中都非常有用,非常強大。僅僅因為它的聲譽就將它排除在外可不是什么好主意。
作者介紹:
Mehdi Zed,開發人員。現在是蒙特利爾的后端開發者和 DevOps。Dev 是他的愛好之一。熱愛寫作。