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

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