欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

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

PHP老矣,尚能飯否?

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

導讀

👉目錄

1 PHP 從輝煌到走向沒落?

2 PHP 流行度下降的原因

3 PHP 編程語言生態(tài)

4 工程規(guī)范更重要

5 PHP 語言還值得學習嗎?

6 PHP 的未來發(fā)展趨勢

7 結語

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






01



PHP 從輝煌到走向沒落?


眾所周知,PHP 語言誕生于 1995 年,它最初只是一個處理 HTTP 表單的腳本工具。在后續(xù)的版本中增加了 MySQL 數(shù)據(jù)庫查詢的支持,才逐漸成為一門獨立的 Web 項目開發(fā)語言。隨著互聯(lián)網的迅猛發(fā)展,因 PHP 易學易用和強大的開發(fā)社區(qū)而備受青睞,成為了互聯(lián)網應用開發(fā)的主要語言之一。與 Linux、MySQL、Apache 合并稱為 LAMP 技術棧,LAMP 對互聯(lián)網的影響巨大,逐漸成為構建動態(tài)網站和應用程序的主要技術架構,據(jù) W3C 的統(tǒng)計,全球有接近 78% 的 Web 網站是基于 PHP 開發(fā)構建的。


值得一提的是,PHP 以其低成本、易用、靈活性和可擴展、繁榮的 Web 技術生態(tài),一度在編程開發(fā)領域占據(jù)著重要的地位,與 Java 語言并駕齊驅。


而隨著移動互聯(lián)網、云計算、人工智能等新技術的興起,互聯(lián)網軟件系統(tǒng)變得越來越復雜。大型網站系統(tǒng)對于高并發(fā)、可用性的要求也越來越高。Java 相比 PHP 擁有類型安全、更好的性能、多線程連接池技術、更嚴格的編程規(guī)范,并且在服務治理方面擁有更成熟的解決方案和生態(tài)。很多技術團隊更傾向于使用 Java 構建 Web 系統(tǒng),而非 PHP。


除此之外,伴隨如 Node.js、Golang 等新編程語言的出現(xiàn),它們在某些方面具有 PHP 不具備的優(yōu)勢,例如靜態(tài)編譯、更好的性能和異步編程。這些編程語言也在蓬勃發(fā)展,被越來越多的開發(fā)者使用。


雖然 PHP 社區(qū)也在不斷努力改進語言本身,但 PHP 在某些領域的競爭地位逐漸被其他語言所取代,隨著時代的發(fā)展,一些重要的網站和應用開始轉向其他語言和框架,這導致了一些人對 PHP 的未來產生了質疑,很多開發(fā)者認為 PHP 正在走向沒落。近期 TIOBE 最新指數(shù)顯示,PHP 的流行度降至了歷史最低,排在第 17 名,也說明了這一點,開發(fā)者正在對 PHP 失去信心,轉向其他編程語言。




02



PHP 流行度下降的原因


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

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

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

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


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




03



PHP 編程語言生態(tài)


其實,生態(tài)對于編程開發(fā)的重要性是不可忽視的,包括開發(fā)工具、庫、框架、社區(qū)、文檔、教程、第三方服務和支持等。生態(tài)系統(tǒng)的健康與發(fā)展直接影響著開發(fā)者的工作效率、項目的成功和技術的發(fā)展。


在我看來,PHP 只在 Web 開發(fā)領域是很成熟的,而 Java 在桌面軟件、Android、大數(shù)據(jù)、金融系統(tǒng)、電商平臺均有成熟的生態(tài)。Python 在數(shù)據(jù)科學、人工智能、機器學習、科學計算、教育等領域有廣泛應用,尤其是隨著 AI 時代的到來,Python 成為當下最為炙手可熱的技術。Golang 云原生、基礎服務器端軟件方面取代了 C/C++。而 Node.js 在前端、單頁面應用(SPA)、全棧開發(fā)方面具備優(yōu)勢。


相比之下 PHP 的生態(tài)非常單一,這也使得 PHP 的局限性尤為明顯。而似乎 PHP 官方團隊似乎對于 Web 開發(fā)之外的生態(tài)支持興趣不大,主要的版本更新也依然是圍繞著 PHP-FPM/Apache 這樣的 Web 服務器進行著。


不過幸好 PHP 社區(qū)有 Swoole 這樣類似于 Golang 的異步協(xié)程方案,從而彌補了 PHP 在異步并發(fā)編程、網絡通信方面的一些不足。Swoole 的引入也為開發(fā)者提供了更多選擇和靈活性,使他們能夠更好地應對復雜的應用場景和高并發(fā)需求。此外,在軟件開發(fā)過程中,良好的工程規(guī)范也是保證項目質量和開發(fā)效率的又一關鍵要素。




04



工程規(guī)范更重要


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

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

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

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

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

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


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

  • phpunit:單元測試框架;

  • composer:包依賴管理器;

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

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

  • phpstan:靜態(tài)分析檢查工具;

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

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


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


   4.1 無法實現(xiàn)徹底的嚴格類型


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


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


1、函數(shù)參數(shù)和返回值

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;}


在開發(fā)中也建議啟用嚴格模式:

<?phpdeclare(strict_types=1);


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

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

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


   4.2 缺少二進制構建支持


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

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

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

  • 部署系統(tǒng)的難題,碎片式更新,導致了部署期間出現(xiàn)各種邏輯錯誤;

  • 源代碼泄露。


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


   4.3 混亂的內置函數(shù)命名


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

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

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


   4.4 混亂的參數(shù)順序


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

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

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




05



PHP 語言還值得學習嗎?


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


   5.1 語言的簡單性


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


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


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


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


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


   5.2 龐大的函數(shù)庫


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


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


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 中的函數(shù),借此 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 的未來發(fā)展趨勢


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


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


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

  • RoadRunner;

  • nativephp;

  • frankenphp;

  • phpy。




07



結語


總而言之,在我看來,PHP 語言整體發(fā)展仍是穩(wěn)中向前,在未來重新流行起來也是極有可能的。最后,我也分別給企業(yè)和開發(fā)者們一些可供參考的建議。


首先,對于企業(yè)選型 PHP 來說,在數(shù)千萬甚至上億用戶活躍的大型 Web 系統(tǒng)中,PHP 技術棧可能會面臨各種挑戰(zhàn)和難題,使用 Java 或 Golang 可以容易獲得更好的性能、工程規(guī)范、高并發(fā)和高可用性、更成熟的服務治理方案。但絕大部分項目不會有如此大規(guī)模的用戶量級和復雜度,使用 PHP 技術棧的開發(fā)團隊依然是比較有性價比的選擇。研發(fā)團隊可以以較少的人力資源投入保持更快的迭代速度,在當下開源節(jié)流的大趨勢下尤為重要。


其次,對于 PHP 開發(fā)者們而言,第一,我們要學習 AI,使用 ChatGPT、Github Copliot 等工具提升自己的開發(fā)效率,了解 Transformers 等大模型的原理;第二,我們可以使用 Docker 鏡像和 Docker Swarm 容器編排工具、Docker Compose 實現(xiàn)本機的容器啟動管理;第三,我們也要掌握 Vue/React/ElementUI 等前端技術棧,要具備全棧開發(fā)的能力;最后,學習 C++/Golang/Java 等其他編程語言技術,不僅僅局限于 PHP 一種編程語言也是十分必要的。


   作者簡介


韓天峰,騰訊云 TVP,識沃科技 CEO,Swoole 開源項目創(chuàng)始人,PHP 官方 PECL 開發(fā)組成員。曾任好未來學而思網校首席架構師,在騰訊朋友網、淘寶搜索、虎牙直播等互聯(lián)網企業(yè)擔任架構師和技術負責人。


-End-
原創(chuàng)作者 | 韓天峰


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