小编典典

如何在php中json编码私有属性?

json

我正在使用教义2和zend框架1.11。在《准则2》中不鼓励使用公共属性,因此我将实体属性设为私有。但是,我刚刚了解到Zend_Json ::
encode()和json_encode()不会看到私有/受保护的属性,因此不会在其输出中添加它们。

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

事实证明,我必须编写自己的函数来进行编码。我希望有人有一个可以代替的解决方案。


阅读 300

收藏
2020-07-27

共1个答案

小编典典

将成员变量设置为私有的全部目的是防止它们对任何外部代码可见(序列化是一个例外,因为需要在会话之间恢复整个对象)。

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

实际上,您可以实现JsonSerializable直接与兼容的界面json_encode

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

$myObject = new MyClass();
echo json_encode($myObject);
2020-07-27