我如何json编码PHP中的私有属性?

Nap*_*eon 4 php json

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

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

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

Exp*_*lls 7

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

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

实际上你可以改变JsonSerializable直接使用的界面json_encode.

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

$myObject = new MyClass();
echo json_encode($myObject);
Run Code Online (Sandbox Code Playgroud)

  • 你能举个例子吗? (3认同)