作者耕耘 PHP 11 年,近年轉向 Python 生態。本文不談語法糖,聚焦語言設計哲學、治理模型、API 一致性、向後相容、現代特性支援等核心維度,為技術選型提供理性參考。
PHP 核心極小,絕大多數功能(curl、mysqli、gd、openssl、json...)以擴展形式存在,本質是 C 函數的薄封裝。導致:
mysqli_connect() 過程式、PDO 物件導向、curl_setopt() 參數順序反直覺、array_map($callback, $arr) vs array_filter($arr, $callback) 參數位置不同。false、部分拋出 Exception、部分觸發 E_WARNING、部分需檢查 error_get_last()。null、false、0、'' 混淆。PHP 由 RFC 流程推進,無單一最終決策者。導致:
ArrayObject、Iterator)、PEAR 偏傳統 PHP 風格、近年新增功能(Random\Randomizer、Stringable)又引入現代風格。each()、create_function()、assert() 字串參數等遲遲不移除,增加認知負擔。為不斷裡全球數億舊站點,PHP 極度克制 Breaking Change:
create_function)。ArrayObject vs 陣列函數)。E_NOTICE、E_WARNING、E_DEPRECATED)難以統一為異常體系。Guido van Rossum(前 BDFL)與核心團隊主導,PEP(Python Enhancement Proposal)公開透明。關鍵哲學:
import this):標準庫 API 高度一致,len(obj)、iter(obj)、obj.method() 統一協議。++/--、無賦值表達式(直到 3.8 :=)、無三元運算符(直到 2.5 x if c else y)、switch 缺席 20 年(3.10 match)。__init__.py),無額外語法。import pkg.mod、from pkg.mod import func as alias、import pkg.mod as pm 靈活別名。importlib.import_module('pkg.mod')、getattr(module, 'func')。importlib.reload(module) 即時生效,開發體驗極佳。asyncio、async/await、aiohttp、FastAPI,高併發 IO 為一等公民。click、typer、rich,輕鬆產出專業終端應用。mypy、pyright 靜態檢查,大型專案可達類 TypeScript 級型別安全。| 維度 | PHP | Python |
|---|---|---|
| 核心設計 | C 擴展薄封裝集合 | 統一語言核心 + 標準庫 |
| API 一致性 | 極低(參數順序、回傳值、錯誤處理皆不一) | 極高(協議驅動、PEP 規範) |
| 治理模型 | 委員會 RFC,無 BDFL | BDFL + 指導委員會 + PEP |
| 向後相容 | 極度保守,負擔重 | 階段性大遷移(2→3),之後穩健 |
| 現代特性 | 漸進補齊(型別、JIT、屬性、纖維) | 早期佈局(非同步、型別提示、模式匹配) |
| 優勢領域 | Web 請求-回應、共享主機、舊系統維護、快速原型 | 資料科學、AI、非同步高併發、CLI、科學計算、大型長期專案 |
| 學習曲線 | 平緩,上手極快 | 中等,縮進語法需適應 |
語言無優劣,唯適合與否。理解語言本質,方能做出經得起時間檢驗的架構決策。