如果我向json_decode()函数传递一个相对于我定义的类的对象的JSON字符串,它返回一个stdClass对象(然后丢失方法)而不是原始类对象...任何建议?
答案 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;
}
}