PHP老矣,尚能飯否?
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
導讀 👉目錄 1 PHP 從輝煌到走向沒落? 2 PHP 流行度下降的原因 3 PHP 編程語言生態 4 工程規范更重要 5 PHP 語言還值得學習嗎? 6 PHP 的未來發展趨勢 7 結語
眾所周知,PHP 語言誕生于 1995 年,它最初只是一個處理 HTTP 表單的腳本工具。在后續的版本中增加了 MySQL 數據庫查詢的支持,才逐漸成為一門獨立的 Web 項目開發語言。隨著互聯網的迅猛發展,因 PHP 易學易用和強大的開發社區而備受青睞,成為了互聯網應用開發的主要語言之一。與 Linux、MySQL、Apache 合并稱為 LAMP 技術棧,LAMP 對互聯網的影響巨大,逐漸成為構建動態網站和應用程序的主要技術架構,據 W3C 的統計,全球有接近 78% 的 Web 網站是基于 PHP 開發構建的。 值得一提的是,PHP 以其低成本、易用、靈活性和可擴展、繁榮的 Web 技術生態,一度在編程開發領域占據著重要的地位,與 Java 語言并駕齊驅。 而隨著移動互聯網、云計算、人工智能等新技術的興起,互聯網軟件系統變得越來越復雜。大型網站系統對于高并發、可用性的要求也越來越高。Java 相比 PHP 擁有類型安全、更好的性能、多線程連接池技術、更嚴格的編程規范,并且在服務治理方面擁有更成熟的解決方案和生態。很多技術團隊更傾向于使用 Java 構建 Web 系統,而非 PHP。 除此之外,伴隨如 Node.js、Golang 等新編程語言的出現,它們在某些方面具有 PHP 不具備的優勢,例如靜態編譯、更好的性能和異步編程。這些編程語言也在蓬勃發展,被越來越多的開發者使用。 雖然 PHP 社區也在不斷努力改進語言本身,但 PHP 在某些領域的競爭地位逐漸被其他語言所取代,隨著時代的發展,一些重要的網站和應用開始轉向其他語言和框架,這導致了一些人對 PHP 的未來產生了質疑,很多開發者認為 PHP 正在走向沒落。近期 TIOBE 最新指數顯示,PHP 的流行度降至了歷史最低,排在第 17 名,也說明了這一點,開發者正在對 PHP 失去信心,轉向其他編程語言。
外因是時代的變化,互聯網的熱潮已退去,現在是人工智能的時代,Python 現在是最流行的編程語言,其他的編程語言的關注度都在下降。內因有以下3個:
盡管如此,PHP 仍然是一門不錯的編程語言技術,許多網站和 Web 應用仍然在使用它。PHP 社區和開發者們也在不斷努力改進 PHP,使其能夠適應新的技術趨勢和市場需求,盡管可能會經歷了一段時間的沒落,但 PHP 仍然會在編程開發領域中扮演著重要角色,這無疑得益于其強大的生態系統。
其實,生態對于編程開發的重要性是不可忽視的,包括開發工具、庫、框架、社區、文檔、教程、第三方服務和支持等。生態系統的健康與發展直接影響著開發者的工作效率、項目的成功和技術的發展。 在我看來,PHP 只在 Web 開發領域是很成熟的,而 Java 在桌面軟件、Android、大數據、金融系統、電商平臺均有成熟的生態。Python 在數據科學、人工智能、機器學習、科學計算、教育等領域有廣泛應用,尤其是隨著 AI 時代的到來,Python 成為當下最為炙手可熱的技術。Golang 云原生、基礎服務器端軟件方面取代了 C/C++。而 Node.js 在前端、單頁面應用(SPA)、全棧開發方面具備優勢。 相比之下 PHP 的生態非常單一,這也使得 PHP 的局限性尤為明顯。而似乎 PHP 官方團隊似乎對于 Web 開發之外的生態支持興趣不大,主要的版本更新也依然是圍繞著 PHP-FPM/Apache 這樣的 Web 服務器進行著。 不過幸好 PHP 社區有 Swoole 這樣類似于 Golang 的異步協程方案,從而彌補了 PHP 在異步并發編程、網絡通信方面的一些不足。Swoole 的引入也為開發者提供了更多選擇和靈活性,使他們能夠更好地應對復雜的應用場景和高并發需求。此外,在軟件開發過程中,良好的工程規范也是保證項目質量和開發效率的又一關鍵要素。
隨著項目研發的經驗越來越多,我深刻體會到工程規范比開發的速度更重要。良好的工程規范能夠確保項目的長期可維護性、可擴展性和穩定性,雖然追求快速開發可能在短期內帶來一些優勢,但長期來看,缺乏規范的項目可能會面臨諸多問題,包括但不限于以下這些:
若我們不重視工程規范,隨著項目持續時間的增加,將會造成嚴重的后果,甚至導致項目研發停滯。而 PHP 社區有很多優秀的項目,可以幫助項目提高工程規范:
不過從編程語言的角度上,PHP 相比 Java 在規范上存在一些天然的缺陷,早期甚至連 namespace 都不支持,面向對象的特性支持也不夠完整。雖然在 PHP7 版本做了大量改進,但最新的 PHP 依然存在以下的問題: 嚴格類型更容易寫出工程規范的代碼。這一點基本上是開發者之間的廣泛共識。弱類型編程基本上就是 “開發一時爽,重構火葬場”。 現在的 PHP 其實已經在大部分語法上支持了類型限定,例如: 1、函數參數和返回值
2、對象屬性
在開發中也建議啟用嚴格模式:
但遺憾的是在 PHP 最常用的數組依然是一個類型黑洞:
由于 PHP 的數組是無類型的,將有嚴格類型的變量存入數組后再取出就出現了類型的丟失。這也是為什么 Facebook 實現的 HHVM 最終選擇不再兼容 PHP,而是獨立為一門新的語言 Hack,在 Hack 語言中實現了徹底的嚴格類型。 一個軟件開發完整流程包括開發、測試、構建、部署運行,Java 和 Golang 這樣的靜態語言是比較好的,軟件開發測試完成發布版本后,應用程序將構建為一份二進制程序,分發和部署不再需要源碼。而 PHP 大部分是直接部署源碼運行的,就導致出現了一些列問題:
雖然現在很多開發者使用 Docker 鏡像構建和部署,解決了一些問題。但PHP 依然存在一些不足,很多上古時期的 PHP 開發者認為熱更新是 PHP 的優勢,實際上熱更新只在開發測試環境中有價值,線上部署運行的服務是不會熱更新的,而且 PHP 的核心開發者們,依然頑固地堅持著熱更新這個特性。 PHP 語言內置的函數全部是在根命名空間內的,并且部分內置函數的命名規范還是錯誤的,例如:
內置函數的參數順序非常混亂,以數組操作函數為例,array_search 和 array_filter,分別是搜索數組是否存在一個元素,后者是從數組篩選出一些符合條件的元素。
因為數組本身不是始終為第一個參數,所以導致開發者無法記憶,每次都需要去看文檔,以確定參數在前還是在后。
盡管如此,我認為 PHP 語言還是值得學習的,相比現在主流的編程語言 Java、Python、C++,以及流行的 Node.js、Rust、Golang 等新型編程語言,PHP 有其無法被取代的獨特優勢,是一個非常便捷的開發工具集,可以幫助開發者節約很多時間。 首先,PHP 相較于大多數編程語言來說,沒有太復雜的語法,不像某些編程語言,有些語法實在難以理解,比如 C++ 的 move/forward(這在 C++ 中還算是比較簡單的,C++ 甚至有語言律師這個職業)。 其次,它不需要考慮整型溢出、符號之類的問題,C++ 或 Golang 中的 int8/int16/int32/int64/uint8/uint16/uint32/uint64。 再者,它沒有指針的概念,也不會遇到 Java 和 Golang 的空指針異常這類開發者頭痛的問題。 同時,它也沒有 Python 中各種眼花繚亂的語法,或 JavaScript 中 0 和 []、'\t'、'0' 三位一體的燒腦問題。 綜上,客觀來說 PHP 語言就是一種樸實無華,入門友好的編程語言,加上它比較簡單,學習的成本極低。 PHP 語言自帶一個龐大的函數庫,各種功能應有盡有。這些函數庫涵蓋了各種各樣的功能和用途,讓開發者能夠更輕松地實現各種軟件功能,包括字符串、數組、日期、數學、正則表達式、JSON、XML、文件操作、郵件、網絡通信、數據庫操作、密碼、加密、圖像處理、終端和進程管理、國際化與字符編碼支持等等。 相比其他語言,需要自己編寫很多代碼去實現一個功能,或者依賴各種第三方庫實現,PHP 就直接可以用內置函數實現。例如: 1、版本比較 要比較兩個格式為 x.y.z 的版本號哪個更高,可以使用 version_compare:
2、通配符計算
3、路徑計算 獲取一個文件路徑字符串的目錄、擴展名、文件名:
還有一個更有趣的擴展庫,可以在 PHP 中直接調用 Python 中的函數,借此 PHP 也可以直接使用 PyTorch、TensorFlow 等 AI 庫,運行 AI 大模型推理、訓練,調用 transformers、Paddle NLP、modelscope 的 AI 能力https://github.com/swoole/phpy 。 4、transformers
5、modelscope
6、paddle NLP
7、gradio client 作為 Gradio 客戶端,調用 AI 模型的能力:
各種常用的編程語言中 PHP 的字符串處理能力是最強大的,沒有之一。PHP 除了是一個編程語言之外,還是一個模版語言。可以直接在模版中嵌入 PHP 表達式,使用起來甚至比 Vue 或 React JSX 模版更強大。 注意:缺點只是不能在瀏覽器中運行 例如下面的代碼,可以模版中使用任意 PHP 語法,沒有任何限制:
自從 PHP 基金會成立后,它每年可以收到上百萬美金的捐助,PHP 語言官方開發團隊的貢獻也越來越穩定。很多編程語言的問題,相信可以在未來都能得以解決。 以 Laravel、Symfony 為代表的 PHP 框架現在也越來越成熟,逐漸拉近了與 Java Spring 框架的距離。而協程擴展項目 Swoole 在今年也推出了 v6.0 的計劃,為 PHP 引入了多線程+協程的并發編程方案。 除此之外,PHP 社區中還誕生了很多有趣的新項目,例如:
總而言之,在我看來,PHP 語言整體發展仍是穩中向前,在未來重新流行起來也是極有可能的。最后,我也分別給企業和開發者們一些可供參考的建議。 首先,對于企業選型 PHP 來說,在數千萬甚至上億用戶活躍的大型 Web 系統中,PHP 技術棧可能會面臨各種挑戰和難題,使用 Java 或 Golang 可以容易獲得更好的性能、工程規范、高并發和高可用性、更成熟的服務治理方案。但絕大部分項目不會有如此大規模的用戶量級和復雜度,使用 PHP 技術棧的開發團隊依然是比較有性價比的選擇。研發團隊可以以較少的人力資源投入保持更快的迭代速度,在當下開源節流的大趨勢下尤為重要。 其次,對于 PHP 開發者們而言,第一,我們要學習 AI,使用 ChatGPT、Github Copliot 等工具提升自己的開發效率,了解 Transformers 等大模型的原理;第二,我們可以使用 Docker 鏡像和 Docker Swarm 容器編排工具、Docker Compose 實現本機的容器啟動管理;第三,我們也要掌握 Vue/React/ElementUI 等前端技術棧,要具備全棧開發的能力;最后,學習 C++/Golang/Java 等其他編程語言技術,不僅僅局限于 PHP 一種編程語言也是十分必要的。 韓天峰,騰訊云 TVP,識沃科技 CEO,Swoole 開源項目創始人,PHP 官方 PECL 開發組成員。曾任好未來學而思網校首席架構師,在騰訊朋友網、淘寶搜索、虎牙直播等互聯網企業擔任架構師和技術負責人。 該文章在 2024/5/21 17:26:18 編輯過 |
相關文章
正在查詢... |