雲栖号資訊:【 點選檢視更多行業資訊】
在這裡您可以找到不同行業的第一手的上雲資訊,還在等什麼,快來!
導讀: 首先說一句,“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 是他的愛好之一。熱愛寫作。
【雲栖号線上課堂】每天都有産品技術專家分享!
課程位址:
https://yqh.aliyun.com/zhibo立即加入社群,與專家面對面,及時了解課程最新動态!
【雲栖号線上課堂 社群】
https://c.tb.cn/F3.Z8gvnK
原文釋出時間:2020-05-28
本文作者: Mehdi Zed
本文來自:“
InfoQ”,了解相關資訊可以關注“
”