(array)$obj最简洁但含私有属性乱码键名;get_object_vars($obj)更规范,仅返回public属性且键名清晰;需访问所有属性时用ReflectionClass;临时方案可用json_decode(json_encode($obj), true)。

直接用 (array) 强制转换
最简洁的方式就是加括号强制转成数组:(array)$obj。PHP 会把对象所有 public 属性 的键和值原样映射为关联数组的键值对。
注意:private 和 protected 属性会被转成特殊格式的键名(比如 "\0ClassName\0property"),可读性差,也不便于后续处理。
用 get_object_vars() 获取公共属性
这是更规范、更常用的方法:get_object_vars($obj)。它只返回对象中定义的 public 属性 组成的关联数组,不包含私有或受保护成员,也不会生成乱码键名。
- 结果干净,键就是属性名,值就是当前值
- 如果对象没有 public 属性,返回空数组
[] - 不依赖反射,性能好,兼容 PHP 5.0+,在 PHP 8.1 中完全适用
需要访问所有属性时用 ReflectionClass
当必须导出 private/protected 属性时,得借助反射:
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
- 创建 ReflectionClass 实例
- 调用 getProperties() 获取全部属性信息
- 遍历每个属性,用 setAccessible(true) 打开访问权限
- 再用 getValue($obj) 取值,手动组装数组
这个方法灵活但稍重,仅在明确需要非 public 成员时才用。
临时方案:json_encode + json_decode
一行写法:json_decode(json_encode($obj), true)。
原理是先序列化为 JSON 字符串(会自动忽略不可序列化的属性,如资源、闭包),再反解为关联数组。优点是简单、能“穿透”访问控制;缺点是会丢失类型(如 int 变成 string)、丢弃不可序列化内容,且性能略低。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










