php序列化和反序列化

序列化是把内存中的对象转换为字符串(流)的形式,方便永久存储或网络传输。

一般的序列化和反序列化是指serialize($var)函数,和unserialize($var)函数。

序列化可以对任意对象(包括数据)使用,只是该形式比较特殊,只有php能使用。

使用json_encode和json_decode同样可以序列化,只是对象一般使用serialize,比如:

serialize序列化之后,反序列化的数据,可以重新调用成员方法,但是json_decode不行。

__sleep和__wakeUp魔术方法

当一个对象被串行化,PHP会调用__sleep方法(如果存在的话,并且进行操作,比如对变量赋值). 在反串行化一个对象后,PHP 会调用__wakeup方法. 这两个方法都不接受参数. __sleep方法必须返回一个数组,包含需要串行化的属性. PHP会抛弃其它属性的值. 如果没有__sleep方法,PHP将保存所有属性.
      在程序执行前,serialize() 函数会首先检查是否存在一个魔术方法 __sleep.如果存在,__sleep()方法会先被调用, 然后才执行串行化(序列化)操作。这个功能可以用于清理对象,并返回一个包含对象中所有变量名称的数组(必须返回。与之相反,unserialize()会检查是否存在一个__wakeup方法。如果存在,则会先调用 __wakeup方法,例如可以用于数据库的重新连接

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注