说实话,我已经有五年没主动跟别人提起我在用PHP写后端了。好像在这个年头,承认自己用PHP就跟承认自己还在用IE一样,有点丢人。但事实是,我手上维护的五个项目里,有四个是PHP写的,其中一个已经跑了一千万次请求,没出过大问题。上个月有个刚毕业的小年轻问我,为什么不用Node.js重写?我笑了笑,没回答。因为这个问题本身就是个坑,回答得好是固执,回答不好是迂腐。
所以我打算在这里正经聊聊,为什么我还在用PHP。先做个对比吧,拿我最熟悉的Laravel跟Express比。写同样的一个用户认证接口,Express需要自己装passport、jsonwebtoken、bcrypt,还得自己写中间件处理错误,一套下来少说两百行。Laravel呢?一句php artisan make:auth就搞定,剩下的改改配置。我知道有人会说那是模板堆出来的,不灵活,但对我来说,我需要的是能快速上线的产品,不是炫技。2023年我接了一个外包项目,时间只有两周,客户要求后台管理+API+前端页面,我用Laravel+Inertia+Vue,一周时间搞定核心功能,第二周修bug和部署。这种速度,你用Go试试?写个结构体都快疯掉。
再说性能,很多人一提起PHP就说慢,那是老黄历了。PHP 8.0引入了JIT,虽然JIT不是万能的,但明显能感觉到数学运算密集型的任务提速了。我做过一个简单测试,斐波那契数列递归计算,PHP 8.2比PHP 7.4快了将近1.8倍。当然跟原生编译语言没法比,但Web应用瓶颈一般不在语言,在数据库和网络IO。实际上,我的一个订单系统,PHP-FPM跑并发300,每个请求响应时间平均200ms,CPU占用才30%。同样的业务用Node.js写,虽然异步IO好,但内存占用高了不少。你可能会说Node.js可以集群,但管理多个进程的复杂度也是成本。
不过我承认,PHP有一些地方确实让人抓狂。比如函数名不统一,strpos和str_replace,strstr和strpos,经常搞混。还有数组的键值顺序,有时候会莫名奇妙。但这不影响我工作效率,因为我有IDE自动补全,而且我写了太多遍了,闭着眼都能写出来。我反而觉得,这些‘缺陷’构成了PHP的独特魅力——它不装,就像你的老朋友,缺点一堆但关键时刻靠得住。我怀念的是以前用PHP写个人博客的时候,那是一种纯粹的快乐,不像现在,动不动就微服务容器化,感觉离代码越来越远。
所以我的观点是,PHP没有过时,只是被一些人不公平地贴了标签。每一个技术都有它的适用场景,关键看你用它解决什么问题。如果你要做一个需要长时间维护的复杂企业应用,PHP配Laravel完全够用;如果你要做实时通信或高并发微服务,那就选Go或Node。没必要互相鄙视。我今年三十八岁了,可能很难再像二十多岁那样学新语言,但PHP让我活得很好,这就够。