我的 PHP 问题
PHP 兼具极高生产力与长期存在的设计怪癖,这一点持续让 Web 开发者分化。评论者指出,从零到可用后端有多么容易,并赞赏 Laravel 和 Symfony 之类的现代框架;同时也批评标准库历史包袱、不安全的行为,以及前端展示逻辑与业务逻辑混杂的倾向。许多人认为,尽管有更简洁的替代方案和更新的语言,PHP 对 HTTP 的紧密耦合、主机环境的普及度以及庞大的既有装机量,仍让它在 Web 世界中占据核心地位,哪怕其生态也在不断演进,以隐藏或缓解这些粗糙边角。
PHP 作为一种高度高效的 Web DSL
- 很多人形容 PHP 能非常快地从想法走到可用的 Web 后端,即使是新手或回归者也一样。
- 优势:与 HTTP 非常契合、部署简单(“把一个文件丢到服务器上”)、易于 SSR、主机支持良好,以及强大的生态系统(WordPress、Laravel、Symfony)。
- 有些人把 PHP 和 Go 对比,称其为“面向网络/Web 服务的 DSL”,并指出 PHP 的按请求/按进程模型,以及对 GET/POST/cookies 的内建处理,都是独特优势。
PHP 与 HTML 混写 vs. 模板系统
- 关于把 PHP 当作模板语言,是一种特性还是历史错误,争论不断。
- 支持方:不需要额外的模板语言,循环/条件判断简单,开发和调试速度快,PHP 本身就是模板引擎。
- 反对方:会鼓励 1000 行的 PHP/HTML/SQL 混合文件,缺乏关注点分离,也让初级开发者很容易把数据库逻辑写进视图里。
- 有些人认为框架和模板引擎主要是为了强制约定并设置防护栏。
- 与 JSX 的比较:有人把它看作“重新包装的 PHP 风格混写”,也有人强调 JSX 只是对函数调用的语法糖,并且有更好的 XSS 安全性。
语言设计怪癖与演进
- 常见抱怨包括标准库 API 不一致(例如参数顺序)、函数返回
false而不是抛异常、迭代器支持薄弱,以及把 PHP 作为“真正”模板系统时的别扭之处(全局变量、include语义)。 - 也有人认为,许多问题可以通过工具/库缓解(安全封装、Psalm/PHPStan、函数式辅助工具),以及近期核心改进(例如新的 JSON 辅助函数)。
- 许多人希望有更好的 async/await 支持、适合二进制数据/缓冲区的原语,以及比数组更丰富的容器类型。
- 也有人觉得,较新的特性和“花哨”模式如果滥用会增加认知负担。
框架、生态与工具链
- Laravel 因快速原型开发而备受赞赏;Symfony 则适合结构化、偏“企业级”的应用(不过也有人觉得它过于“魔法化”或文档不足)。
- GraphQL:大家对 Laravel Lighthouse 的 schema-first 方法和与 ORM 的深度集成热情很高;而其他 PHP GraphQL 技术栈的体验则褒贬不一。
- 提到 Swoole/FrankenPHP 等现代工具(性能、服务模型)、静态分析器和安全封装,说明 PHP 也能支持稳健、现代的工作流。
遗留包袱、公众印象与职业现实
- PHP 很大一部分坏名声来自旧版 WordPress/CF/老旧 PHP5 代码库,以及匆忙交付的代理公司项目。
- 不少人指出,现代的全新 PHP 项目(配合框架和工具链)其实可以很舒适、性能不错,而且收入可观,但很多工作仍然是在“抢救”旧代码。