PHP中将对象转数组有五种方法:一、(array)强制转换,保留所有属性但加前缀;二、get_object_vars()仅返回public属性;三、json_encode/decode中转,要求属性可序列化;四、实现JsonSerializable接口自定义导出;五、用ReflectionClass获取全部属性值并清理前缀。

如果您在PHP开发中需要将对象转换为数组,以便于数据序列化、调试输出或与数组操作函数配合使用,则可能遇到对象属性不可直接访问或转换结果不符合预期的问题。以下是几种可靠的转换方法:
一、使用类型强制转换
PHP支持通过 (array) 强制类型转换将对象转为关联数组,该方式会将对象的公共属性(public)作为键名,其值作为对应键值;受保护(protected)和私有(private)属性会被添加前缀修饰符,但仍保留在数组中。
1、定义一个包含 public、protected 和 private 属性的类实例。
2、使用 $array = (array) $object; 语法执行转换。
立即学习“PHP免费学习笔记(深入)”;
3、注意:protected 属性键名前会添加 * 符号,private 属性键名前会添加 类名完整命名空间及空字符,需用 var_dump() 查看实际键名结构。
二、使用 get_object_vars() 函数
get_object_vars() 仅返回对象的可访问(即 public)属性组成的关联数组,不包含 protected 或 private 成员,适用于只需导出公开数据的场景。
1、确保目标对象实例已创建且至少含有一个 public 属性。
2、调用 $array = get_object_vars($object); 获取数组结果。
3、若对象无 public 属性,该函数将返回 空数组 [],而非 null 或 false。
三、通过 JSON 编解码中转
利用 json_encode() 将对象序列化为 JSON 字符串,再用 json_decode() 以关联数组形式解析,可规避可见性限制并获得扁平化结构,但要求对象属性可被 JSON 序列化(即非资源、闭包等)。
1、确认对象不含不可序列化的属性(如 resource、Closure、未实现 JsonSerializable 接口的自定义对象)。
标签: php js json access 工具 php开发
还木有评论哦,快来抢沙发吧~