PHP json_decode()与我定义的类一起使用,返回一个stdClass

时间:2012-05-15 10:04:38

标签: php json

如果我向json_decode()函数传递一个相对于我定义的类的对象的JSON字符串,它返回一个stdClass对象(然后丢失方法)而不是原始类对象...任何建议?

4 个答案:

答案 0 :(得分:1)

尝试serialize()和unserialize()

答案 1 :(得分:1)

JSON是数据的格式,而不是代码。您应该使用解码的JSON数据初始化对象,而不是期望直接创建它们。想想为什么PHP对象的序列化函数可以实现__sleep和__wakeup方法。

答案 2 :(得分:1)

JSON不带有关于对象类型(类)的信息,它是一个Javacript对象文字。它携带的唯一信息是属性的名称和值。

如果要将PHP对象编码为字符串,使其可以转换回正确类型的PHP对象,则需要serialize()它。

答案 3 :(得分:1)

PHP如何知道您的JSON来自何处或打算如何使用它? JSON本身不包含任何此类信息,json_decode不提供任何此类功能。

如果您希望类实例可以序列化为JSON,则需要手动填写空白,可能从以下内容开始:

class Foo {
    public function toJSON() {
        return json_encode($this);
    }

    public static function fromJSON($json) {
        $obj = json_decode($json);
        $foo = new Foo;
        foreach ($obj as $prop => $value) {
            $foo->$prop = $value;
        }

        return $foo;
    }
}