gpt4 book ai didi

php - 我如何在 php 中对私有(private)属性进行 json 编码?

转载 作者:可可西里 更新时间:2023-11-01 00:16:43 24 4
gpt4 key购买 nike

我正在使用 doctrine 2 和 zend framework 1.11。 Doctrine 2 不鼓励公共(public)属性,因此我将我的实体属性设为私有(private)。然而,我刚刚了解到 Zend_Json::encode() 和 json_encode() 不会看到私有(private)/ protected 属性,因此不会将它们添加到它们的输出中。

因此,当我使用 var_dump 和 var_dump 时,我得到一个空集,例如 string(4) "[{}]"。

事实证明我必须编写自己的函数来进行编码。我希望有人能提供我可以使用的解决方案。

最佳答案

将成员变量设为私有(private)的全部意义在于防止它们对任何外部代码可见(序列化是一个异常(exception),因为整个对象将需要在 session 之间恢复)。

而不是 json_encoding 这个对象,你或许应该创建一个接口(interface)“encodeable”,方法是“encode”。这将返回此对象所需的任何成员的 json 编码字符串。这为您提供了额外的控制,因为您可以选择要序列化的成员,而不是序列化所有成员,甚至可以对它们执行操作以序列化其他数据。

实际上你可以实现 JsonSerializable直接与 json_encode 一起工作的接口(interface)。

class MyClass implements \JsonSerializable
{
public function jsonSerialize()
{
return get_object_vars($this);
}
}

$myObject = new MyClass();
echo json_encode($myObject);

关于php - 我如何在 php 中对私有(private)属性进行 json 编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6613792/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com