You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中json_encode序列化类公有属性的行为是否可以可靠依赖?

结论

你提到的json_encode自动序列化对象所有公有属性的行为可以稳定依赖,没有兼容性风险。

这个行为是json_encode的原生默认规则,从PHP 5.2版本该函数正式加入核心以来就没有变过,目前所有正在维护的PHP版本(包括PHP 8.0+全分支)都遵循该逻辑,官方也没有任何要调整该规则的相关计划。
默认序列化的规则很清晰:只要待序列化的对象没有实现\JsonSerializable接口,json_encode就会自动提取该对象的全部公有属性作为序列化的键值对,和你示例中的输出完全一致。

如果不想实现\JsonSerializable重复声明字段,完全可以直接使用默认行为,你给出的示例写法本身就是可直接用于生产环境的标准写法。如果后续需要增加简单的序列化控制,也可以直接将对象强转为数组后传入json_encode,输出结果和默认行为完全等价:

echo json_encode((array)$dto);

如果你的项目使用PHP 8.0及以上版本,配合构造器属性提升可以进一步简化DTO的编写:

<?php
class MyDTO 
{
    public function __construct(
        public int $foo,
        public bool $bar
    ) {}
}

$dto = new MyDTO(42, false);
echo json_encode($dto); // 输出同样为 {"foo":42,"bar":false}

内容的提问来源于stack exchange,提问作者Storm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 15:48:04