PHP 7.4中无单一内置函数转对象为数组,常用方式有四种:1. get_object_vars()仅取public属性;2. json_encode+json_decode全量导出但丢失类型;3. (array)强制转换保留所有属性但键名含特殊前缀;4. 自定义__toArray()方法最灵活可控。

PHP 7.4 中将对象转数组没有单一“内置函数”,但有多种成熟、稳定且兼容该版本的实现方式。选择哪一种,取决于你对属性可见性、嵌套结构、序列化安全性和控制粒度的要求。
只取 public 属性:用 get_object_vars()
这是最轻量、最安全的方式,专为提取可直接访问的公有属性设计。
- 不处理 private/protected 属性,也不触发魔术方法(如 __get)
- 返回纯关联数组,键名干净无前缀,适合 API 响应中仅暴露公开字段
- 不递归——若属性本身是对象,它仍保持对象形态,需额外处理
快速扁平化所有属性(含 protected/private):json_encode + json_decode
利用 JSON 编解码中转,能绕过可见性限制,是 PHP 7.4 中最常用、兼容性最好的“全量导出”方案。
- 写法简洁:
$arr = json_decode(json_encode($obj), true); - 自动处理嵌套对象和数组,结果是深度展开的关联数组
- 要求对象所有属性值可 JSON 序列化(不能含 resource、Closure、循环引用)
- DateTime 等对象会转为字符串,原始类信息丢失,返回的是 stdClass 或普通数组
保留全部属性但接受特殊键名:强制类型转换 (array)
底层最直接的操作,但键名格式对日常使用不友好,适合调试或底层工具函数。
- public 属性 → 正常键名(如
'name') - protected 属性 → 键名为
"\0*\0prop" - private 属性 → 键名为
"\0ClassName\0prop" - 若需统一访问,得用正则清洗键名,或配合 ReflectionClass 提前标准化
精细控制与复用性优先:自定义 __toArray() 方法
在业务类中主动定义,是 PHP 7.4 项目中推荐的工程化做法。
- 由开发者决定哪些字段导出、是否格式化(如日期转 Y-m-d)、是否忽略敏感属性
- 可递归调用子对象的 __toArray(),形成统一转换契约
- 支持条件逻辑(如仅在 debug 模式下包含调试字段)
- 不依赖外部函数,类型安全,IDE 友好,便于单元测试
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











