PHP中将对象转数组有五种方法:一是强制类型转换(array),保留所有属性但私有/受保护属性键名带前缀;二是get_object_vars(),仅返回public属性;三是JSON编码解码,可绕过可见性限制但要求值可序列化;四是自定义__toArray()方法,灵活性最高;五是反射API,可获取全部属性值。
PHP 支持通过 (array) 强制类型转换将对象转换为数组,该操作会将对象的公共属性(public)作为键值对导入数组,私有(private)和受保护(protected)属性会被添加前缀修饰符,影响键名结构。
1、定义一个包含 public、protected 和 private 属性的类实例。
2、在需要转换的位置,使用 (array)$obj 语法执行转换。
3、注意:转换后 protected 属性键名为 \0*\0property_name,private 属性键名为 \0Classname\0property_name,需正则或字符串处理方可统一访问。
get_object_vars() 仅返回对象中可访问的 public 属性组成的关联数组,不包含 protected 或 private 成员,适合明确只需公开字段的场景,且不依赖属性可见性修饰符干扰键名。
1、确保目标对象实例化完成且至少存在一个 public 属性。
2、调用 get_object_vars($obj),传入对象变量。
3、函数返回结果为纯关联数组,键为属性名,值为对应当前值,无额外命名空间前缀。
利用 json_encode() 将对象序列化为 JSON 字符串,再用 json_decode($json, true) 强制解析为关联数组,可绕过可见性限制并扁平化嵌套对象,但要求所有属性值均可 JSON 序列化。
1、确认对象中不含资源(resource)、闭包(Closure)或循环引用,否则 json_encode 将失败或返回 false。
2、执行 $arr = json_decode(json_encode($obj), true)。
3、该方式会丢失原始属性的可见性标识,所有键均为纯字符串,且 DateTime 等对象将转为 ISO8601 字符串形式。
在类内部定义显式的 __toArray() 魔术方法或普通公有方法,由开发者控制哪些属性参与转换、是否递归处理子对象、是否格式化值,提供最高灵活性和可维护性。
1、在类中声明 public function __toArray() { ... }。
2、方法体内手动构造数组,例如 return ['id' => $this->id, 'name' => $this->name]。
3、支持对 DateTime、其他对象等调用各自 __toArray() 或 format() 方法,实现深度可控转换。
借助 ReflectionClass 可突破访问控制,获取 public、protected、private 所有属性的名称与值,并按需构造数组,适用于需完整状态导出且不能修改原类定义的场景。
1、实例化 $ref = new ReflectionClass($obj)。
2、调用 $props = $ref->getProperties() 获取全部属性反射对象列表。
3、遍历 $props,对每个属性调用 $prop->setAccessible(true); $arr[$prop->getName()] = $prop->getValue($obj)。
# php
# js
# json
# 编码
# access
# 键值对
# Array
# Resource
# 关联数组
# 命名空间
# format
# 字符串
# 强制类型转换
# 递归
# 循环
# public
# private
# protected
# 闭包
# 类型转换
# function
# 对象
# this
# 键名
# 见性
# 自定义
# 序列化
# 修饰符
# 一是
# 遍历
# 只需
# 均为
相关文章:
如何在景安云服务器上绑定域名并配置虚拟主机?
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
如何通过服务器快速搭建网站?完整步骤解析
建站之星CMS建站配置指南:模板选择与SEO优化技巧
大学网站设计制作软件有哪些,如何将网站制作成自己app?
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
建站与域名管理如何高效结合?
网站制作的方法有哪些,如何将自己制作的网站发布到网上?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
外贸公司网站制作哪家好,maersk船公司官网?
在线教育网站制作平台,山西立德教育官网?
网站制作的步骤包括,正确网址格式怎么写?
网站制作新手教程,新手建设一个网站需要注意些什么?
如何通过可视化优化提升建站效果?
宝塔建站教程:一键部署配置流程与SEO优化实战指南
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
如何在阿里云通过域名搭建网站?
如何通过.red域名打造高辨识度品牌网站?
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
制作农业网站的软件,比较好的农业网站推荐一下?
建站之星代理费用多少?最新价格详情介绍
如何自定义建站之星模板颜色并下载新样式?
宝塔建站无法访问?如何排查配置与端口问题?
如何快速配置高效服务器建站软件?
如何快速查询网址的建站时间与历史轨迹?
网站好制作吗知乎,网站开发好学吗?有什么技巧?
定制建站方案优化指南:企业官网开发与建站费用解析
如何在Golang中指定模块版本_使用go.mod控制版本号
广州美橙建站如何快速搭建多端合一网站?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
建站之星好吗?新手能否轻松上手建站?
,怎么在广州志愿者网站注册?
如何快速重置建站主机并恢复默认配置?
寿县云建站:智能SEO优化与多行业模板快速上线指南
盘锦网站制作公司,盘锦大洼有多少5G网站?
建站主机SSH密钥生成步骤及常见问题解答?
XML的“混合内容”是什么 怎么用DTD或XSD定义
建站之家VIP精选网站模板与SEO优化教程整合指南
如何在局域网内绑定自建网站域名?
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
如何用VPS主机快速搭建个人网站?
Python路径拼接规范_跨平台处理说明【指导】
建站主机CVM配置优化、SEO策略与性能提升指南
专业网站建设制作报价,网页设计制作要考什么证?
教育培训网站制作流程,请问edu教育网站的域名怎么申请?
如何快速搭建自助建站会员专属系统?
如何高效生成建站之星成品网站源码?
网站制作话术技巧,网站推广做的好怎么话术?
*请认真填写需求信息,我们会在24小时内与您取得联系。