zzxworld

都 2022 了,还有必要学 PHP 吗

都 2022 了,还有必要学 PHP 吗

PHP 诞生于 1995 年,掐指一算,已经快 30 年。这样一门从上个世纪走来,而且主要用于 Web 开发的编程语言,在目前的环境下,还有学习和使用的必要吗?对于这个问题,我想从多年的使用体验出发,分享点个人看法。

没必要学

我本身是自学的编程。最开始入门的后端编程语言是 ASP。从使用方面来比较,它和 PHP 很像。比如都支持和 HTML 代码混写。ASP 的问题在于,它只能在 Windows 系统上使用。这个限制带来的问题就是线上部署也只能选择 Windows 服务器。在我学习 ASP 的年代,选择 Windows 服务器意味着要花更多的钱,以及各种系统漏洞带来的安全问题。于是我转向了 PHP。

通过 PHP,我从一个业余的掌握了点 ASP 编程技能的个人站长,转身成为了一名职业程序员。就这点来说,我对 PHP 是有感情的。但随着使用和了解的深入,我对 PHP 的不满也越来越多。

这些不满主要体现在三方面:

  1. 不规范的内部函数命名。
  2. 每个 PHP 文件开头都必须要有的 <?php 符号。
  3. 每个变量都必须以 $ 开头。

这些对一些程序员来说可能不算什么,但在追求代码规范和表达简洁的程序员看来,就十分难受。拿第一点来举例,如果要做替换字符串的操作,PHP 有 str_replace 函数可供使用。那么从直觉上来说,其他相应的字符串函数也应该以 str_ 为前缀来命名。但事实上你会看到 strchrstrcmpstrlen 这另外一种连写的风格。

第二点中提到的 <?php 符号,这如果是在还未流行模板渲染,以及没有前后端分离的开发环境下情有可原。但都 2022 年了,依然还在每个以 .php 结尾的文件下保留着这个开头符号,我实在想不出它存在的价值。

第三点可能习惯了后觉得没什么,但我即便写了这么多年 PHP,依然对这个变量符号耿耿于怀。包括调用对象方法的 -> 符号。

以上只是我个人对 PHP 语法层面设计的吐槽。从这方面来说,PHP 做的不是很好。而且在可预见的几年里,它依然还会顶着这些历史包袱前进。

除了这些语言上的先天不足,目前系统架构环境的改变也让 PHP 日渐式微。观察这几年层出不穷的各种 Web 开发框架,就会发现它们有一个共性:API 优先。甚至很多框架基本都止步于 JSON 路由这一层,如果需要渲染 HTML,或是添加 Session 这类传统功能的支持都需要自己去配置。这种前后端分离加接口化的后端开发方式,以及微服务架构的助推,让 PHP 有了很多可替代选择。

从跟上形势的角度出发,PHP 已经不是必选项。如果你学编程的目的是为了跟上主流技术的发展,去大厂工作,我不太推荐学习 PHP。目前兼顾前后端以及桌面开发的 JavaScript,或是如日中天的后端语言 Go,亦或者是被人喊了多少年「要死掉」,依然屹立不倒的 Java,都会是更加明智的选择。

有必要学

程序员的职场并不是只有这些大厂的存在。对于一些没能力投入太多资源在 IT 端的小企业,乃至个人来说,PHP 依然是最佳选择。

拿我自己举例,作为自由职业者,我有一大堆想要尝试的想法。这些想法会不断的化身为各种小项目。问题是这些实验性的项目大多还没什么用户和访问量,唯一的特点就是数量多。如果用其他诸如 Python 或是 Go 等语言来开发,每个项目都要启动一个实例。不管有没有人访问,项目启动后的资源都是必须要占用的。用 PHP 就不存在这个问题,只需要启动一套 FPM,就可以应用于多个项目。没有访问的项目除了占用硬盘存储资源,不会消耗任何 CPU 和内存资源。这是成本上的优势。

PHP 目前的开发框架在结构和功能方面更完整。我在过去的一年里体验过好几个 Python 和 Go 的 Web 开发框架,这些框架总体来说写写后端 API 接口是没问题。但要用在我目前的各种项目中,还需要完善不少功能,碰到不喜欢的还需要自己动手造轮子。就完整度来说,还远远比不上 PHP 下的一些开发框架。这是开发效率的优势。

对于一些需要快速搭建项目原型的场合,PHP 有各种成型的 CMS 可供选择。比如搭建博客有 WordPress,Typecho;搭建购物网站有 Opencart,Magento;搭建论坛有 Flarum, phpBB;你总能很容易找到各种现成的开源作品拿来就用,几分钟就解决问题。这是生态优势。

学还是不学

如果上面学和不学的理由依然让你拿不定主意,那我建议还是学吧。技多不压身,而且 PHP 学起来也简单。另外 PHP 成熟的生态和社区也能让你在想要折腾点什么项目的时候,以最小的成本和资源来搞定。特别是各种类型的开源建站程序。

版权声明

本文为原创内容, 使用「创意共享 3.0 许可证」。在非商用的前提下可自由转载,需保留来源和署名。