PHP中将对象转数组有五种方法:一、(array)强制转换,仅限公共属性;二、get_object_vars(),只返回public属性;三、json_encode/json_decode组合,可绕过访问控制但要求属性可JSON化;四、ReflectionObject反射,可获取所有属性但性能低;五、类中定义toArray()方法,最灵活可控。

如果您需要将 PHP 中的对象转换为数组,以便进行数据处理、序列化或与其他系统交互,则可能遇到对象属性不可直接访问或类型不匹配的问题。以下是实现该目标的多种方法:
这是最简洁的方式,适用于标准对象(非 StdClass 子类或具有魔术方法的自定义类),它会将对象的公共属性转为关联数组键值对,私有和受保护属性会被添加前缀修饰符。
1、声明一个包含公共属性的对象实例。
2、在变量前添加 (array) 进行强制类型转换。
立即学习“PHP免费学习笔记(深入)”;
3、注意:受保护属性会以 \0*\0property_name 形式出现,私有属性则为 \0ClassName\0property_name。
该函数仅返回对象的可访问(public)属性组成的关联数组,不包含私有或受保护属性,也不处理继承关系中的父类 public 属性(除非子类显式暴露)。
1、调用 get_object_vars($obj),传入目标对象变量。
2、确保对象处于当前作用域且具备可读性。
3、若对象实现了 __get() 魔术方法,此函数不会触发该方法,仅反射实际存在的 public 属性。
通过先将对象 JSON 序列化再反序列化为数组,可绕过访问控制限制并获取所有可序列化的属性值,但要求对象属性可被 json_encode 处理(即不能含资源、闭包或循环引用)。
1、调用 json_encode($obj) 将对象转为 JSON 字符串。
2、立即调用 json_decode($json, true),第二个参数设为 true 以返回关联数组而非 StdClass 实例。
3、若对象中存在无法 JSON 化的属性(如 resource 或 Closure),该方法将失败并返回 null。
利用反射机制可访问 public、protected 和 private 属性,并手动构建数组,适合需完整属性映射且不依赖 JSON 的场景,但性能开销较大。
1、实例化 ReflectionObject 并传入目标对象。
2、调用 getProperties() 获取所有属性反射对象列表。
3、对每个属性反射对象调用 setAccessible(true),再使用 getValue($obj) 提取值并写入结果数组。
为对象所属类显式实现 toArray() 方法,可精确控制哪些属性参与转换、是否递归处理嵌套对象、是否格式化日期等,是最可控且面向对象的方式。
1、在类定义内部添加公共方法 public function toArray()。
2、在方法体内使用 $this->property 形式逐个赋值到新数组中。
3、对嵌套对象属性,递归调用其自身的 toArray() 方法或判断类型后处理。
以上就是php把对象转换为数组方法_php对象转数组操作详解【教程】的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号