带有不可序列化部分的PHP序列化

时间:2009-06-15 14:32:42

标签: php serialization

我有一个PHP类,它存储数据库查询结果,但也包含一个PDO对象,以便可以动态更新/重新插入/等结果。一个临时的ORM,如果你愿意的话。

问题是,我需要序列化这个类,但PDO的实例无法序列化。我很好;当对象被序列化时,我不需要PDO实例。

有没有办法在类中标记变量以排除序列化,就像有其他语言一样?我知道在我想要序列化类之前我可以手动取消设置()PDO变量,但是使用当前的代码结构,这将是一个噩梦。

我在这里保存的优雅是一个可以被覆盖的__serialize()方法,但它不会出现类似的东西。

2 个答案:

答案 0 :(得分:6)

__sleep() and __wakeup()

或者,您可以实施Serializable

答案 1 :(得分:0)

从 PHP 7.4 开始,还有 __serialize__unserialize(参见 Documentation)作为更有用的替代方案。

Serializable 接口也可能是 deprecated,通常首选魔术方法(另见 this)。