我正在使用教义2和zend框架1.11。在《准则2》中不鼓励使用公共属性,因此我将实体属性设为私有。但是,我刚刚了解到Zend_Json :: encode()和json_encode()不会看到私有/受保护的属性,因此不会在其输出中添加它们。
因此,当我同时使用var_dump和var_dump时,会得到一个空集,例如string(4)“ [{}]”。
事实证明,我必须编写自己的函数来进行编码。我希望有人有一个可以代替的解决方案。
将成员变量设置为私有的全部目的是防止它们对任何外部代码可见(序列化是一个例外,因为需要在会话之间恢复整个对象)。
代替json_encoding这个对象,您也许应该使用方法“ encode”创建一个“ encodeable”接口。这将返回此对象所需的任何成员的json编码字符串。这为您提供了更多控制权,因为您可以选择要序列化的成员,而不是序列化所有成员,甚至对其执行操作以序列化其他数据。
实际上,您可以实现JsonSerializable直接与兼容的界面json_encode。
JsonSerializable
json_encode
class MyClass implements \JsonSerializable { public function jsonSerialize() { return get_object_vars($this); } } $myObject = new MyClass(); echo json_encode($myObject);