PHP中将对象转数组有五种方法:一、强制类型转换仅保留公共属性;二、get_object_vars()返回公共属性;三、json_encode与json_decode组合可处理嵌套及部分非公共属性;四、自定义toArray()方法实现精准控制;五、ReflectionClass反射获取全部属性(含私有/受保护)。

如果您在PHP开发中需要将对象转换为数组,以便于数据处理、序列化或与其他系统交互,则可能是由于对象属性需要以键值对形式访问。以下是实现此目标的多种方法:
PHP支持通过(type)语法将对象直接转换为关联数组,该方式适用于标准对象(stdClass)及具有公共属性的自定义类实例,转换后仅保留公共属性。
1、声明一个标准对象并赋值:
$obj = new stdClass();
$obj->name = "张三";
$obj->age = 25;
2、执行强制类型转换:
$arr = (array)$obj;
立即学习“PHP免费学习笔记(深入)”;
3、验证结果:
var_dump($arr); // 输出包含 'name' 和 'age' 键的数组
该函数返回对象中所有可访问的公共属性组成的关联数组,不包含私有或受保护属性,也不触发__get魔术方法,适合需明确控制属性可见性的场景。
1、定义一个含公共属性的类:
class User { public $id = 1; public $username = "admin"; }
2、实例化并调用函数:
$user = new User();
$arr = get_object_vars($user);
3、检查输出:
print_r($arr); // 显示 id 和 username 键值对
先将对象JSON序列化,再反序列化为关联数组,可递归处理嵌套对象及部分不可见属性(如受保护属性在启用JSON_THROW_ON_ERROR且对象实现JsonSerializable时可能被包含),但要求对象属性可被json_encode处理。
1、确保对象不含资源或闭包等不可序列化成分
2、执行两步转换:
$arr = json_decode(json_encode($obj), true);
3、注意:若对象含中文字符或特殊编码,需确认脚本文件及环境为UTF-8编码,否则可能出现乱码或null值
通过在自定义类中显式编写toArray()方法,可完全控制哪些属性参与转换、是否进行格式化或过滤,适用于业务逻辑耦合度高、需统一数据出口规范的场景。
1、在类中添加公共方法:
public function toArray() { return [ 'id' => $this->id, 'name' => $this->name, 'created_at' => $this->createdAt->format('Y-m-d H:i:s') ]; }
2、调用该方法:
$arr = $obj->toArray();
3、该方式支持时间对象格式化、字段别名映射和条件排除
利用反射机制可访问私有、受保护属性,并按需设为可读,适用于调试、通用序列化工具或需完整属性快照的场景,但性能开销高于其他方法。
1、创建反射实例:
$ref = new ReflectionClass($obj);
2、获取所有属性(含非公共):
$props = $ref->getProperties();
3、遍历并设置可访问性后读取值:
$arr = [];
foreach ($props as $prop) { $prop->setAccessible(true); $arr[$prop->getName()] = $prop->getValue($obj); }
以上就是php怎么样把对象转换成数组_php对象转数组技巧【步骤】的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号