PHP 怪异之处揭秘:数组功能过载、类型系统笨重,却仍有可取之处
PHP 的怪异之处
2026 年 5 月 19 日,过去 5 年,作者在工作中一直使用 PHP 进行编码,所在组织的整个后端都是 2007 年公司刚成立时用 PHP 编写的。尽管 PHP 是成熟且常用的语言,但业内口碑不好,大多是因人们对其能力了解过时。作者已不在那家公司工作,反思使用 PHP 的经历,发现有些地方很奇怪,下面解释两个最突出的问题:数组很奇怪且功能过载、类型系统很笨重。
数组并非真正的数组
PHP 标准库基本只有 `array` 这一种数据结构,技术上是 _有序键值字典_,而非传统意义上的数组。灵活性带来复杂性,若想创建固定大小的对象集合,实际上做不到。修改数组会出现问题,因为它是键值存储。使用内置函数进行数组操作,键的顺序可能不一致。让数组恢复自然索引状态,需用 `array_values()` 函数,否则会出现难察觉的 bug。作者认为 PHP 不支持简单的对象集合很奇怪,处理任意数字键很烦人。
类属性类型令人困惑
PHP5 引入原生类型系统,到 PHP7 可定义类属性类型。但类型系统有怪癖,建立在动态类型语言之上,类属性可能出现隐藏的未初始化状态。实例化 `Book` 对象后,未声明类型的属性有值为 `NULL`,另外两个属性没值。对未初始化的属性进行空值检查会出现致命错误。宽松的属性定义行为让编写代码更困难,类属性类型系统对理解对象组成帮助不大,引入了新的未初始化状态。作者认为未初始化不该成为一种状态,可空类型属性应默认设为 `null`,非可空类型应定义为构造函数提升参数或声明时有默认值。
结论
尽管作者对 PHP 诸多批评,但仍认为它遭受的诋毁不公正。和任何语言一样,它有怪癖和权衡,但仍能用 PHP 完成其他语言能完成的任务。作者喜欢 PHP 的一些方面:它是脚本语言,开发阻力小;[Laravel](https://laravel.com/) 是强大的 Web 框架;所有的 $ 符号会提醒赚钱目的。
