“最好的語言“ 25 歲了,PHP說要走向安全和開放!
本文經AI新媒體量子位(公眾號ID:QbitAI)授權轉載,轉載請聯系出處。
今年 4 月,隨著PHP 7.4.5 正式發布,宣告PHP誕生25年,作為一門飽受爭議的編程語言,PHP 經歷了什么,又準備如何解決歷史遺留問題?
PHP 主要使用場景是前端開發,并且被視為 WordPress 的“標準語言”,但 PHP 公認的問題是安全性和較為混亂的開發環境配置。
就在最近,一場圍繞PHP的討論,在程序員聚集的HackerNews展開,要點如下。
正方:OOP進化、對外開放和性能提升
面向對象編程(OOP)的理念在PHP 4時代正式引入,但長期帶有嚴重的性能問題,因為實際上是通過一個帶有函數引用的數組來進行實現,直到PHP 5進行重構,但也僅僅是勉強堪用,Hacker News一位網友就表示,多數人被勸退就在PHP 5時代。
直到PHP 7的發布,才真正達到可使用的狀態,實現了例如函數參數、返回值的類型化以及標量的直接使用。
在PHP 7.4上,加入了鍵入對象屬性的新功能,將這些功能與命名空間,交互接口和可迭代結合在一起,更加強大和易用。
雖然PHP已經25周歲,但并未顯現老態,反而更為樂于擁抱外面的世界。
這一趨勢在PHP 7.4版本表現的十分明顯,明確支持外部語言接口(Foreign Language Interface,FFI)模式,對基于C語言的擴展包開放,允許更多外部擴展包參與到PHP的編程與維護工作中。
在HN的討論區中,很多人表示希望WordPress增加更多的語言選項,但在可預見的未來,PHP仍將長期使用于WordPress的維護中。
在PHP 7.4之前,開發者更習慣于“內置電池”的模式解決問題,好處是編寫起來簡單易懂,但代價是項目會隨著開發者的更換和語言的進化逐漸變得難以維護,向其他語言開放有助于解決這一問題。
PHP 7.4每秒處理的請求數量是PHP 5.6的三倍,甚至比PHP 7.0快約18%。
此外值得一提的是預加載能力的提升,開發者可以使用opcache.preload配置指令,并指定PHP腳本的路徑可以很容易地啟用這一模式。
該腳本中引用的所有類和函數將被永久加載到內存中,并根據需要在每個服務器請求中進行引用。
此外,預加載模式下的每個請求的資源是可復用的,因此可降低請求時間。
當然,這也意味著如果要更改配置內容必須重啟服務器。
反方:生態割裂和安全隱憂
長期以來,PHP的社區生態是割裂的。
擁有PEAR和PECL兩種包管理器,并且同時被官方支持,因為二者分別由C語言和PHP實現,造成了更嚴重的不兼容問題。
并且,由于PHP的更新迭代,年代久遠的包的維護和更新已經成為了大問題,HN的討論熱點就主要集中在PHP的維護上,而非新項目的開發。
出于可維護性的考慮,從PHP 7.4開始,官方不建議再使用PEAR,PHP推出自己的包管理器,官方稱其為Composer,使用方式非常接近于Python的pip和Node的npm,極大減少了開發者的維護難度。
不出意外的話,PHP 7.X會陪伴我們很長時間,據消息,PHP 8.0的alpha版本會在6月份釋出,現存的PHP的bug會在 8.X時代修復,主要更新會集中在安全上。
實際上,PHP最為人詬病的是安全性問題,無論是否贊成PHP是世界上最好的語言,但大多數前端開發者都承認PHP的安全性較差。
而在PHP 5.4時代官方移除safe_mode,更是勸退了大波開發者,在意識到問題后,PHP重新支持這一模式。
雖然有所反復,但總歸是好事一樁。近期的PHP開始使用Argon2 password-hashing 算法,這是多年密碼學哈希算法競賽的冠軍,也許是為表明對安全性的重視。
你認為PHP能否繼續在前端開發中保持熱度呢?