狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

PHP老矣,尚能飯否?

admin
2024年5月21日 17:26 本文熱度 957

導讀

👉目錄

1 PHP 從輝煌到走向沒落?

2 PHP 流行度下降的原因

3 PHP 編程語言生態

4 工程規范更重要

5 PHP 語言還值得學習嗎?

6 PHP 的未來發展趨勢

7 結語

近期 TIOBE 最新指數顯示,PHP 的流行度降至了歷史最低,排在第 17 名,同時,在年度 Stack Overflow 開發者調查報告中,PHP 在開發者中的受歡迎程度已經從之前的約 30% 萎縮至現在的 18%。“PHP 是世界上最好的語言”已成為承載程序員黑色幽默的爛梗。在滿是唱衰的市場環境中,究竟 PHP 是否真的沒有前景,是否已經不值得學習了?今天,我們特邀了識沃科技 CEO 、騰訊云 TVP 韓天峰老師,他將為我們深入解讀 PHP 的發展現狀和未來發展趨勢。






01



PHP 從輝煌到走向沒落?


眾所周知,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 失去信心,轉向其他編程語言。




02



PHP 流行度下降的原因


外因是時代的變化,互聯網的熱潮已退去,現在是人工智能的時代,Python 現在是最流行的編程語言,其他的編程語言的關注度都在下降。內因有以下3個:

  • PHP 生態過于單一,沒有在 Web 之外進入新的領域;

  • PHP 語言在類型系統、編譯器、并發編程方面迭代更新力度不夠,沒能及時趕超 Java、Golang、JavaScript(v8) 這些語言和技術;

  • 解決歷史包袱的魄力不足,至今依然保留著 20 年前的包袱,例如 $_GET/$_POST 等超全局變量、混亂的函數命名等。


盡管如此,PHP 仍然是一門不錯的編程語言技術,許多網站和 Web 應用仍然在使用它。PHP 社區和開發者們也在不斷努力改進 PHP,使其能夠適應新的技術趨勢和市場需求,盡管可能會經歷了一段時間的沒落,但 PHP 仍然會在編程開發領域中扮演著重要角色,這無疑得益于其強大的生態系統。




03



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 的引入也為開發者提供了更多選擇和靈活性,使他們能夠更好地應對復雜的應用場景和高并發需求。此外,在軟件開發過程中,良好的工程規范也是保證項目質量和開發效率的又一關鍵要素。




04



工程規范更重要


隨著項目研發的經驗越來越多,我深刻體會到工程規范比開發的速度更重要。良好的工程規范能夠確保項目的長期可維護性、可擴展性和穩定性,雖然追求快速開發可能在短期內帶來一些優勢,但長期來看,缺乏規范的項目可能會面臨諸多問題,包括但不限于以下這些:

  • 代碼質量下降:沒有規范的代碼往往會變得混亂、難以理解和維護,使得團隊成員在開發、調試和修改代碼時耗費更多的時間和精力;

  • 團隊協作困難:缺乏規范的項目往往意味著每個開發者都有自己的編碼風格和習慣,這會導致團隊協作時的不一致性和溝通困難;

  • 代碼可讀性差:規范的代碼更易于閱讀和理解,有助于開發者快速定位問題、理解代碼邏輯和進行代碼審查;

  • 維護成本增加:缺乏規范的代碼往往會增加項目的維護成本,因為開發者需要花更多的時間和精力來理解和修改代碼,從而增加了項目的技術債務;

  • 項目演進困難:隨著項目規模的擴大和需求的變更,缺乏規范的代碼可能會變得越來越難以維護和擴展,甚至需要重構或重寫部分代碼。


若我們不重視工程規范,隨著項目持續時間的增加,將會造成嚴重的后果,甚至導致項目研發停滯。而 PHP 社區有很多優秀的項目,可以幫助項目提高工程規范:

  • phpunit:單元測試框架;

  • composer:包依賴管理器;

  • PSR:是社區制定的一系列 PHP 編碼規范,涵蓋了自動加載、編碼風格、命名規范、接口設計等方面;

  • php-cs-fixer:代碼自動格式化工具;

  • phpstan:靜態分析檢查工具;

  • rector:語言版本兼容性檢查工具,若項目要升級 PHP 版本可以使用它;

  • php-parser:PHP AST 抽象語法樹解析工具,可以分析 PHP 語法,做些安全檢查、漏洞掃描、編程語言轉換,例如 phpy 項目 py2php 就是用它實現的。


不過從編程語言的角度上,PHP 相比 Java 在規范上存在一些天然的缺陷,早期甚至連 namespace 都不支持,面向對象的特性支持也不夠完整。雖然在 PHP7 版本做了大量改進,但最新的 PHP 依然存在以下的問題:


   4.1 無法實現徹底的嚴格類型


嚴格類型更容易寫出工程規范的代碼。這一點基本上是開發者之間的廣泛共識。弱類型編程基本上就是 “開發一時爽,重構火葬場”。


現在的 PHP 其實已經在大部分語法上支持了類型限定,例如:


1、函數參數和返回值

function fun(int $a, float $b, FunClass $c, string $d, callable $e): bool {    // code ...}


2、對象屬性

class FunClass {    public int $age;    public string $name;    public stdClass $attrs;}


在開發中也建議啟用嚴格模式:

<?phpdeclare(strict_types=1);


但遺憾的是在 PHP 最常用的數組依然是一個類型黑洞:

$a1 = new FunClass;$array = [$a1];$a2 = $array[0];

由于 PHP 的數組是無類型的,將有嚴格類型的變量存入數組后再取出就出現了類型的丟失。這也是為什么 Facebook 實現的 HHVM 最終選擇不再兼容 PHP,而是獨立為一門新的語言 Hack,在 Hack 語言中實現了徹底的嚴格類型。


   4.2 缺少二進制構建支持


一個軟件開發完整流程包括開發、測試、構建、部署運行,Java 和 Golang 這樣的靜態語言是比較好的,軟件開發測試完成發布版本后,應用程序將構建為一份二進制程序,分發和部署不再需要源碼。而 PHP 大部分是直接部署源碼運行的,就導致出現了一些列問題:

  • WebShell 注入,通過上傳或其他文件寫入的攻擊行為,將部分有害代碼注入系統中;

  • 直接在線上修改 PHP 源代碼文件,導致了實際服務器上的代碼與 Git 倉庫中的代碼不一致;

  • 部署系統的難題,碎片式更新,導致了部署期間出現各種邏輯錯誤;

  • 源代碼泄露。


雖然現在很多開發者使用 Docker 鏡像構建和部署,解決了一些問題。但PHP 依然存在一些不足,很多上古時期的 PHP 開發者認為熱更新是 PHP 的優勢,實際上熱更新只在開發測試環境中有價值,線上部署運行的服務是不會熱更新的,而且 PHP 的核心開發者們,依然頑固地堅持著熱更新這個特性。


   4.3 混亂的內置函數命名


PHP 語言內置的函數全部是在根命名空間內的,并且部分內置函數的命名規范還是錯誤的,例如:

  • htmlspecialchars,多個字母直接拼在一起,正確的應該是:html_encode_special_chars;

  • strstr, substr, str_replace 等字符串相關函數,命名相當混亂,而數組操作相關函數的命名就規范多了,均是 array_* 這樣命名。


   4.4 混亂的參數順序


內置函數的參數順序非常混亂,以數組操作函數為例,array_search 和 array_filter,分別是搜索數組是否存在一個元素,后者是從數組篩選出一些符合條件的元素。

array_filter($array, $callback);arary_search($value, $array);

因為數組本身不是始終為第一個參數,所以導致開發者無法記憶,每次都需要去看文檔,以確定參數在前還是在后。




05



PHP 語言還值得學習嗎?


盡管如此,我認為 PHP 語言還是值得學習的,相比現在主流的編程語言 Java、Python、C++,以及流行的 Node.js、Rust、Golang 等新型編程語言,PHP 有其無法被取代的獨特優勢,是一個非常便捷的開發工具集,可以幫助開發者節約很多時間。


   5.1 語言的簡單性


首先,PHP 相較于大多數編程語言來說,沒有太復雜的語法,不像某些編程語言,有些語法實在難以理解,比如 C++ 的 move/forward(這在 C++ 中還算是比較簡單的,C++ 甚至有語言律師這個職業)。


其次,它不需要考慮整型溢出、符號之類的問題,C++ 或 Golang 中的 int8/int16/int32/int64/uint8/uint16/uint32/uint64。


再者,它沒有指針的概念,也不會遇到 Java 和 Golang 的空指針異常這類開發者頭痛的問題。


同時,它也沒有 Python 中各種眼花繚亂的語法,或 JavaScript 中 0 和 []、'\t'、'0' 三位一體的燒腦問題。


綜上,客觀來說 PHP 語言就是一種樸實無華,入門友好的編程語言,加上它比較簡單,學習的成本極低。


   5.2 龐大的函數庫


PHP 語言自帶一個龐大的函數庫,各種功能應有盡有。這些函數庫涵蓋了各種各樣的功能和用途,讓開發者能夠更輕松地實現各種軟件功能,包括字符串、數組、日期、數學、正則表達式、JSON、XML、文件操作、郵件、網絡通信、數據庫操作、密碼、加密、圖像處理、終端和進程管理、國際化與字符編碼支持等等。


相比其他語言,需要自己編寫很多代碼去實現一個功能,或者依賴各種第三方庫實現,PHP 就直接可以用內置函數實現。例如:


1、版本比較

要比較兩個格式為 x.y.z 的版本號哪個更高,可以使用 version_compare:

var_dump(version_compare('1.9.2', '1.10.0'));var_dump(version_compare('1.10.0', '1.9.20'));


2、通配符計算

var_dump(fnmatch('*.qq.com', 'qqcloud.com'));var_dump(fnmatch('*.qq.com''im.qq.com'));


3、路徑計算

獲取一個文件路徑字符串的目錄、擴展名、文件名:

$path_parts = pathinfo('/www/htdocs/inc/lib.inc.php'); echo $path_parts['dirname'], "\n";echo $path_parts['basename'], "\n";echo $path_parts['extension'], "\n";echo $path_parts['filename'], "\n";

還有一個更有趣的擴展庫,可以在 PHP 中直接調用 Python 中的函數,借此 PHP 也可以直接使用 PyTorch、TensorFlow 等 AI 庫,運行 AI 大模型推理、訓練,調用 transformers、Paddle NLP、modelscope 的 AI 能力https://github.com/swoole/phpy 。


4、transformers

$transformers = PyCore::import('transformers'); $os = PyCore::import('os');$os->environ->__setitem__('https_proxy', getenv('https_proxy')); $distilled_student_sentiment_classifier = $transformers->pipeline(    model: "lxyuan/distilbert-base-multilingual-cased-sentiments-student",    top_k: null,); $rs = $distilled_student_sentiment_classifier ("I love this movie and i would watch it again and again!");var_dump(PyCore::scalar($rs));


5、modelscope

$pipeline = PyCore::import('modelscope.pipelines')->pipeline;$Tasks = PyCore::import('modelscope.utils.constant')->Tasks; $pipe = $pipeline($Tasks->ocr_recognition, model: 'damo/cv_convnextTiny_ocr-recognition-general_damo');$file = '/tmp/captcha.png';file_put_contents($file, file_get_contents($captcha_url));echo '識別結果:' . $pipe($file)['text'][0], PHP_EOL;


6、paddle NLP

$pprint = PyCore::import('pprint')->pprint;$Taskflow = PyCore::import('paddlenlp')->Taskflow; $schema = new PyList(['時間', '選手', '賽事名稱']);$ie = $Taskflow('information_extraction', schema: $schema);$pprint($ie("2月8日上午北京冬奧會自由式滑雪女子大跳臺決賽中中國選手谷愛凌以188.25分獲得金牌!"));


7、gradio client

作為 Gradio 客戶端,調用 AI 模型的能力:

$gradio_client = PyCore::import('gradio_client')->Client;$client = $gradio_client("http://192.168.1.146:8088/");$result = $client->predict("Hello!!", api_name: "/predict");PyCore::print($result);


   5.3 強大的字符串處理能力


各種常用的編程語言中 PHP 的字符串處理能力是最強大的,沒有之一。PHP 除了是一個編程語言之外,還是一個模版語言。可以直接在模版中嵌入 PHP 表達式,使用起來甚至比 Vue 或 React JSX 模版更強大。


注意:缺點只是不能在瀏覽器中運行


例如下面的代碼,可以模版中使用任意 PHP 語法,沒有任何限制:

var json = <?= json_encode($data) ?>; <?php foreach($lines as $line): ?>    document.write(<?=$line?>);<?php endforeach; ?>




06



PHP 的未來發展趨勢


自從 PHP 基金會成立后,它每年可以收到上百萬美金的捐助,PHP 語言官方開發團隊的貢獻也越來越穩定。很多編程語言的問題,相信可以在未來都能得以解決。


以 Laravel、Symfony 為代表的 PHP 框架現在也越來越成熟,逐漸拉近了與 Java Spring 框架的距離。而協程擴展項目 Swoole 在今年也推出了 v6.0 的計劃,為 PHP 引入了多線程+協程的并發編程方案。


除此之外,PHP 社區中還誕生了很多有趣的新項目,例如:

  • RoadRunner;

  • nativephp;

  • frankenphp;

  • phpy。




07



結語


總而言之,在我看來,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 開發組成員。曾任好未來學而思網校首席架構師,在騰訊朋友網、淘寶搜索、虎牙直播等互聯網企業擔任架構師和技術負責人。


-End-
原創作者 | 韓天峰


該文章在 2024/5/21 17:26:18 編輯過
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved