-1

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

4

4 回答 4

1

尝试序列化()和反序列化()

于 2012-05-15T10:08:04.787 回答
1

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

于 2012-05-15T10:08:32.317 回答
1

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

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

于 2012-05-15T10:09:11.310 回答
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;
    }
}
于 2012-05-15T10:11:04.470 回答