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()
与其他方法的行为没有什么不同。您可以在父类中定义基本行为,并在子类中对其进行优化