PHP 已死,只是沒人愿意大聲承認(rèn)

你不會(huì)在 PHP 大會(huì)聽到這句話,WordPress 也不會(huì)寫進(jìn)博客。但看完它從“全民最愛”到“行業(yè)笑柄”的曲線,我?guī)缀醮_信:我們正見證這門最具爭(zhēng)議的語(yǔ)言進(jìn)入謝幕階段。
不會(huì),PHP 明天不會(huì)突然消失——龐大的 WordPress 存量會(huì)讓它帶管呼吸很多年。可別自欺:除了還在維護(hù)的 PHP 開發(fā)者外,幾乎所有人都明白它在結(jié)構(gòu)性衰退。
名譽(yù)崩塌:從段子主角到負(fù)面教材
在程序員社交圈里,PHP 常常等同于“反面示范”。
調(diào)侃爛代碼?舉 PHP。課堂講“如何別寫程序”?拉 PHP 墊背。招聘看到“PHP”,許多面試官條件反射地蹙眉。
這不是“偏見”,而是多年口碑沉淀。過(guò)去 25 年,它一次次做出“反直覺”的設(shè)計(jì)選擇,以至于“PHP 風(fēng)格”被當(dāng)成“錯(cuò)誤語(yǔ)言設(shè)計(jì)的代名詞”。
幾件“名場(chǎng)面”:
mysql_real_escape_string()(因?yàn)?nbsp;mysql_escape_string()還不夠“real”?)- 命名體系七零八落(
strlen/str_split/strpos) - 參量順序忽左忽右(有時(shí) needle-haystack,有時(shí) haystack-needle)
- Magic Quotes(默認(rèn)開啟,污染一片)
- Register Globals(默認(rèn)開啟的安全災(zāi)難)
當(dāng)“歷史陳列柜”里擺滿“壞決定”,問(wèn)題就不是“成長(zhǎng)痛”,而是底層世界觀。
WordPress 的“輸血管”
“可 PHP 托舉了 43% 的網(wǎng)站!”有人會(huì)說(shuō),“看 WordPress!看 Facebook!看 Wikipedia!”
不太好聽的真相:WordPress 不是 PHP 的“功勛章”,而是它的氧氣瓶。
43% 的“市占”來(lái)自于 WordPress,而不是因?yàn)?PHP 多先進(jìn),而是因?yàn)椋?/span>
- 搶先布局 + 共享主機(jī)一把梭
- 非技術(shù)用戶需要一個(gè)“能用就行”的系統(tǒng)
- 門檻幾乎為 0,成本幾乎為 0
這更像是歷史紅利 + 供應(yīng)側(cè)的規(guī)模化供給,而非語(yǔ)言本身的技術(shù)勝利。
與此同時(shí),許多從 PHP 起家的“嚴(yán)肅業(yè)務(wù)”最終都脫鉤:
- Facebook 做了 Hack,核心長(zhǎng)期以 C++ / Rust 為主
- Slack 把后端換到 Java / Go
- Etsy 把關(guān)鍵系統(tǒng)遷向 JVM
- Medium 轉(zhuǎn)向 Node.js
當(dāng)你的最佳“案例”最終都選擇離家出走,那叫“故事講得好”,不叫“生態(tài)向上”。
共享主機(jī)的“歷史人質(zhì)”
PHP 的“無(wú)處不在”,更像是被共享主機(jī)架起來(lái)的既定事實(shí)。
2000 年代初,廉價(jià)主機(jī)為什么選它?
- 免費(fèi),無(wú)許可費(fèi)
- 和 Apache 無(wú)腦整合
- 配置簡(jiǎn)單,上手極快
- 對(duì)“能展示網(wǎng)頁(yè)就行”的站點(diǎn)足夠
二十多年后,這種默認(rèn)配置依舊在慣性運(yùn)行:“PHP+MySQL”仍是很多主機(jī)的默認(rèn)棧。這形成了一種**“假繁榮”:看似份額巨大,實(shí)則是初學(xué)者與小微商戶**的路徑依賴。
但看看真正的增量創(chuàng)新在哪里:
- 創(chuàng)業(yè)公司:Node.js / Python / Go
- 企業(yè)級(jí):Java / C#
- 高性能:Rust / C++
- 現(xiàn)代前后端:JS 前端框架 + API 后端
PHP 的“勢(shì)力范圍”越來(lái)越集中在遺留系統(tǒng)與價(jià)格敏感的長(zhǎng)尾——而這些都不塑造語(yǔ)言的未來(lái)。
框架墳場(chǎng)與“看似繁榮”
PHP 框架生態(tài)留下了一地“墓碑”:
已涼:
- CodeIgniter(形式上活著,靈魂已飛)
- CakePHP(主角時(shí)代停在 2012)
- Zend Framework(改名改到自我消耗)
- Phalcon(C 擴(kuò)展的調(diào)試噩夢(mèng))
- FuelPHP(油盡燈枯)
半尸變:
- Symfony(強(qiáng)大也繁復(fù),學(xué)習(xí)曲線直上天花板)
- Laravel(語(yǔ)法優(yōu)雅但遮不住語(yǔ)言基建的坑)
- Yii(“還在”,“但也就那樣”)
大家都承諾“讓 PHP 現(xiàn)代化/企業(yè)級(jí)”,可框架蓋不住語(yǔ)言的地基。 Laravel 的“成功學(xué)”尤其說(shuō)明問(wèn)題:它基本是把 Rails(2005 年) 的理念移植過(guò)來(lái)。“現(xiàn)代”如果等于復(fù)刻二十年前,那叫跟隨,不叫引領(lǐng)。
類型系統(tǒng):晚學(xué)走路
PHP 和類型的關(guān)系,像一個(gè)三十歲才學(xué)走路的人。
二十年里,它基本沒有類型系統(tǒng):變量可以到處變形,甚至一行里換著玩:
// 經(jīng)典 PHP:猜猜會(huì)返回啥?
function add($a, $b) {
return $a + $b;
}
add("5", 3); // 8(字符串被轉(zhuǎn)成數(shù)字)
add("hello", 3); // 3("hello" -> 0)
add([1,2], [3,4]); // 數(shù)組轉(zhuǎn)字符串告警/錯(cuò)誤
add(null, 5); // 5(null -> 0)PHP 7 開始類型提示,PHP 8 逐漸收緊。這固然是進(jìn)步,但更多是承認(rèn)過(guò)去的混沌。 而同一時(shí)代的新語(yǔ)言,從第一天就把類型打滿格。當(dāng)你的“改良”是在追 70 年代的設(shè)計(jì)共識(shí),那不是進(jìn)步,是補(bǔ)課。
安全“祖?zhèn)麟[患”
“默認(rèn)不安全,需要手動(dòng)加固”幾乎是 PHP 的標(biāo)簽。
- 默認(rèn)容易埋下 SQL 注入 / XSS
- 文件上傳漏洞層出不窮
- 會(huì)話管理讓安全工程師頭大
eval()/exec()天然就是靶子
現(xiàn)代框架會(huì)疊加安全中間層,但本質(zhì)是在流沙上蓋金庫(kù)。 其他語(yǔ)言從 PHP 的教訓(xùn)起步,把安全寫進(jìn)語(yǔ)言模型;當(dāng)你的安全策略是“希望框架救命”,你擁有的不是安全,而是高危資產(chǎn)。
性能:從“慘不忍睹”到“勉強(qiáng)能看”
“PHP 8 很快!”支持者會(huì)掏出基準(zhǔn)數(shù)據(jù),證明它現(xiàn)在“只慢 10 倍,不再慢 50 倍”。
現(xiàn)實(shí)更骨感:
- PHP“Hello World”HTTP:~ 1,000 req/s
- Go:~ 100,000 req/s
- Rust:~ 200,000+ req/s
- Node.js:~ 10,000 req/s
所謂“優(yōu)化”,更多是把“尷尬”修成了“尚可”。核心結(jié)構(gòu)沒變:每個(gè)請(qǐng)求都重新構(gòu)建應(yīng)用上下文;而現(xiàn)代后端保持常駐進(jìn)程、復(fù)用資源、全鏈路優(yōu)化。 1995 年的小網(wǎng)站,這樣干無(wú)傷大雅;2025 年的高并發(fā)世界,這叫架構(gòu)失職。
人才外流:沒人愿意“以 PHP 為終點(diǎn)”
新人不再主動(dòng)選擇 PHP:
- GitHub 語(yǔ)言榜長(zhǎng)期走低
- Stack Overflow 調(diào)研里滿意度拉胯
- 訓(xùn)練營(yíng)/Bootcamp 主打 JS / Python / React,很少教 PHP
- 高校更愿把 PHP 當(dāng)作歷史橋段
仍在使用 PHP 的人,大致兩類:
- 遺留守門人:維護(hù) WordPress 與老系統(tǒng)
- 堅(jiān)定派:相信 Laravel 能抵消語(yǔ)言的“原罪”
而“人才活水”流向更有前景的棧:
- JavaScript:就業(yè)面廣
- Python:AI / 數(shù)據(jù)科學(xué)
- Go:后端主力
- Rust:系統(tǒng)級(jí)
當(dāng)新鮮血液不再涌入,社區(qū)就不是生態(tài),而是互助會(huì)。
現(xiàn)代 Web 與移動(dòng)浪潮中“缺位”
PHP 基本錯(cuò)過(guò)了每一個(gè)關(guān)鍵范式轉(zhuǎn)移:
- SPA 崛起:JS 生態(tài)接管
- 移動(dòng)端 API:Go / Node / Python 當(dāng)家
- 實(shí)時(shí) & 推送:WebSocket + 現(xiàn)代語(yǔ)言贏面大
- 微服務(wù):PHP 的傳統(tǒng)模型很別扭
- 云原生:PHP 鏡像臃腫
- 邊緣計(jì)算:主流邊緣運(yùn)行時(shí)不玩它
PHP 擅長(zhǎng)的依舊是:在傳統(tǒng)服務(wù)器上拼接 HTML。在一個(gè)API + 前端應(yīng)用 + 邊緣邏輯的時(shí)代,這相當(dāng)于成為了最會(huì)發(fā)電報(bào)的人。
企業(yè)級(jí)的“難堪”
嚴(yán)肅企業(yè)在新項(xiàng)目上幾乎不會(huì)選擇 PHP:
- 性能:Java / C# / Go
- 可靠性:成熟企業(yè)語(yǔ)言
- 安全:盡量避開“隱患血統(tǒng)”
- 可擴(kuò)展:適配現(xiàn)代架構(gòu)
- 人才:高校與社群供給充足
PHP 在企業(yè)的存在,多半是:
- 市場(chǎng)部托管的 WordPress
- 重寫成本過(guò)高的老系統(tǒng)
- 小生意的展示站與表單系統(tǒng)
當(dāng)最大的“企業(yè)戰(zhàn)報(bào)”是“還沒來(lái)得及遷移”,這不叫企業(yè)級(jí),這叫企業(yè)忍耐。
Composer 的“后知后覺”
包管理是現(xiàn)代生態(tài)的命門,Composer 卻來(lái)得太晚。副作用顯而易見:
- 依賴解析陰晴不定
- 版本沖突令人心力交瘁
- 安全審計(jì)工具鏈欠火候
- autoload 在生產(chǎn)上偶發(fā)“離奇崩壞”
vendor膨脹超過(guò)應(yīng)用本體
工具不差在“不會(huì)做工具”,而差在語(yǔ)言基建讓好工具舉步維艱。
Async/Await:尷尬的補(bǔ)課姿勢(shì)
當(dāng) Node.js / Python / C# 把異步模型打磨成熟,PHP 交出的答卷是 ReactPHP:讓 PHP 假裝像 Node.js。
- 復(fù)雜度更高
- 性能更差
- 受眾更窄
- 出錯(cuò)更多
現(xiàn)代 Web 需要大規(guī)模并發(fā)連接的優(yōu)雅處理;PHP 的常見回答是:多進(jìn)程 + 祈禱。
開發(fā)體驗(yàn):像坐上時(shí)光機(jī)
2025 年寫 PHP,常有一種 2005 年味道:
- 報(bào)錯(cuò)信息模糊
- 調(diào)試靠
var_dump()+ 心誠(chéng)則靈 - IDE 支持雖有進(jìn)步,仍不如同代
- 測(cè)試存在(PHPUnit),但存在感不強(qiáng)
- 部署要么 FTP 祖?zhèn)鞣?/span>,要么 容器上重刀,中間地帶稀薄
- 觀測(cè)與追蹤強(qiáng)依賴第三方拼裝
而其他主流語(yǔ)言提供的則是:友好錯(cuò)誤、原生調(diào)試、成熟 IDE、第一公民的測(cè)試工具、簡(jiǎn)化的發(fā)布流程、可觀測(cè)性默認(rèn)在線。
結(jié)論:它曾“普惠”,也曾“拖累”
PHP 的成功更多是時(shí)代紅利:Web 暴漲年代 + 免費(fèi) + 門檻低。 世界變了:工程文化成熟,語(yǔ)言設(shè)計(jì)拔高,基礎(chǔ)設(shè)施升級(jí),正確的做法成為共識(shí)。
PHP 的退潮不是瞬間崩塌,而是代際更替:
- 新人不選
- 在任的遷出
- 新項(xiàng)目避開
- 學(xué)界把它當(dāng)“歷史梗概”
蛛絲馬跡隨處可見:
- WordPress 正在把更多能力遷向 JS 側(cè)(如 Gutenberg)
- 頭部應(yīng)用陸續(xù)完成技術(shù)更代
- 主機(jī)商提供 Node/Python 做默認(rèn)選項(xiàng)
- 開發(fā)者調(diào)研里興趣與滿意度走低
- 職位描述里“PHP 維護(hù)”多于“PHP 開發(fā)”
它不會(huì)一夜蒸發(fā):WordPress 和海量遺留會(huì)長(zhǎng)久存在。但 PHP 正在變成你被迫繼承的語(yǔ)言,而非你主動(dòng)選擇的語(yǔ)言。
未來(lái) Web 的地基,正在由吸取了 PHP 教訓(xùn)的語(yǔ)言來(lái)澆筑:
- 類型安全,一次性消滅大片 bug
- 高性能運(yùn)行時(shí),服務(wù)現(xiàn)代負(fù)載
- 友好工具鏈,輔助而不遮蔽
- 安全模型內(nèi)建,面向敵對(duì)互聯(lián)網(wǎng)
- 可擴(kuò)架構(gòu),適配云原生與邊緣
PHP 會(huì)像 COBOL 一樣長(zhǎng)期存在——用于維護(hù),不用于開辟。
當(dāng)歷史給 PHP 收個(gè)尾,大概會(huì)寫下這樣一句話:
“它曾讓萬(wàn)眾能寫網(wǎng)站;后來(lái),它也讓網(wǎng)站難以上進(jìn)。”
你還在做 PHP 嗎?你的遷移策略是什么?討論不會(huì)停止,但 PHP 在那場(chǎng)討論里的位置,已經(jīng)越來(lái)越清晰。


























