Php 从内部序列化对象
我有一个类Php 从内部序列化对象,php,Php,我有一个类testClass,它有方法save。此方法将对象保存到数据库。但它需要在保存之前序列化对象。如何从类中序列化对象来实现这一点 class testClass { private $prop = 777; public function save() { $serializedObject = serialize(self); DB::insert('objects', array('id', 'object'))
testClass
,它有方法save
。此方法将对象保存到数据库。但它需要在保存之前序列化对象。如何从类中序列化对象来实现这一点
class testClass {
private $prop = 777;
public function save() {
$serializedObject = serialize(self);
DB::insert('objects', array('id', 'object'))
->values(array(1, $serializedObject))
->execute();
}
}
序列化(self)显然不起作用。首先,您需要将
$this
传递给serialize()
,而不是self
:
$serializedObject = serialize($this);
其次,除非您没有实现接口(从PHP 5.1开始),否则您需要实现“magic method”\u sleep()
,以便序列化私有或受保护的属性:
public function __sleep() {
return array('prop');
}
这应该会有进一步的帮助。如果我的对象
testClass
将其他类的对象作为属性包含,那么这些其他类是否也应该为私有属性实现\u sleep
功能呢?@Maximus是的,它们必须这样做。如果没有,您需要使用testClass
的\uuu sleep()
和\uu wakeup
来获取必要的数据,以便再次序列化和取消序列化它们。@Maximus No、\uu sleep
和\uu wakeup
必须public@Maximus还要检查接口。(我忘了提到这一点)\uu sleep()
/\uu wakeup()
与其他方法的行为没有什么不同。您可以在父类中定义基本行为,并在子类中对其进行优化