PHP json_encode 类私有成员

2022-08-30 10:19:21

我正在尝试在PHP中对某些对象进行JSON编码,但我遇到了一个问题:我想对由类私有成员保存的数据进行编码。我发现这段代码通过调用编码函数来编码此对象,例如:

public function encodeJSON() 
{ 
    foreach ($this as $key => $value) 
    { 
        $json->$key = $value; 
    } 
    return json_encode($json); 
}

但是,仅当我要编码的对象不包含其他对象时,这才有效,情况就是如此。我该如何不仅对“外部”对象进行编码,而且还对任何作为对象的成员进行编码?


答案 1

序列化具有私有属性的对象的最佳方法是实现 \JsonSerializable 接口,然后实现自己的 JsonSerialize 方法以返回序列化所需的数据。

<?php

class Item implements \JsonSerializable
{
    private $var;
    private $var1;
    private $var2;

    public function __construct()
    {
        // ...
    }

    public function jsonSerialize()
    {
        $vars = get_object_vars($this);

        return $vars;
    }
}

json_encode现在将正确序列化您的对象。


答案 2

如果您使用的是 php 5.4,则可以使用 JsonSerializable 接口:http://www.php.net/manual/en/class.jsonserializable.php

您只需在类中实现一个 jsonSerialize 方法,该方法返回要编码的任何内容。

然后,当您将对象传递到json_encode时,它将对 jsonSerialize 的结果进行编码。


推荐