当前位置: 首页 > news >正文

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 框架;所有的 $ 符号会提醒赚钱目的。

http://www.jsqmd.com/news/876509/

相关文章:

  • 深入Debootstrap日志:手把手教你读懂Ubuntu根文件系统构建的每一个细节
  • 游戏模组加载终极指南:MelonLoader完整使用教程
  • 抖音下载器:3分钟搞定批量下载,效率提升95%的秘密武器
  • 基于C#实现即时通讯工具的示例代码
  • 别再让Ubuntu卡成PPT了!手把手教你调整Swap分区大小(从1G到64G实战)
  • ICU死亡率预测模型公平性监控:从文档偏见识别到GAM模型实践
  • 英雄联盟智能助手:让每一局游戏都像职业选手一样从容
  • ab、Postman、JMeter并发测试真相:协议层、运行时与系统瓶颈解析
  • Rubish:纯 Ruby 编写的 UNIX shell,深度集成 Ruby 且功能强大!
  • 2026年5月海南财税公司推荐,代理记账哪家好,乱账整理、注册公司代办高性价比优选权威测评 - 品牌智鉴榜
  • MacType终极指南:5个简单步骤让Windows字体渲染媲美macOS
  • 数字主权还是数字枷锁?德国eIDAS钱包的Apple/Google账户依赖之困
  • 如何用Python自动化工具提升大麦网抢票成功率:5个实战技巧
  • K210开发板固件烧录终极指南:kflash_gui完全使用手册
  • Android APP通信协议逆向:AES+Base64+Protobuf加密还原实战
  • 终于让我找到了小红书流量密码!点赞34,收藏14,我却被封号了:小红书最狠的封号逻辑,根本不看图
  • Ubuntu 22.04上从零安装UCSF DOCK 6.11:手把手解决依赖与编译的那些坑
  • TinyML安全实战:从硬件攻击到模型防护的嵌入式AI安全指南
  • 12全排列 II 回溯
  • GetQzonehistory:三步永久保存QQ空间记忆的免费数据迁移工具
  • 如何高效提取Wallpaper Engine资源?RePKG专业工具全解析
  • 基于支持点样本分割与双重机器学习的高维因果推断实践
  • 高效音频解密利器:qmc-decoder深度解析与应用指南
  • abc459_d Adjacent Distinct String 的一种构造方法
  • 11全排列 回溯
  • Postman 401错误排查:Bearer Token认证填法与工程化实践
  • 抖音批量下载器终极指南:如何3分钟搞定无损音乐提取与高效素材管理
  • 30+平台一键文档下载:告别繁琐流程,实现“所见即所得“的自由
  • 2026年免费降AI/AIGC率保姆级教程:3款亲测好用不踩雷的降AI工具 - 降AI实验室
  • 如果你要设计一个“个人助理“Agent,记忆系统应该如何分层?