Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP可序列化接口_Php_Oop_Serialization - Fatal编程技术网

PHP可序列化接口

PHP可序列化接口,php,oop,serialization,Php,Oop,Serialization,我正在尝试持久化一个名为Authorizer的大型类,该类包含对数据库连接的引用和表示一组复杂数据库查询结果的其他对象的容器。我想序列化在会话中构建此对象的部分所需的开销。然后,当我需要问授权人一个问题时,我想唤醒授权人对象,而不是为每个页面构建一个新的问题。我正在编写一个自定义处理程序,将此对象临时存储在数据库表中。我知道神奇的方法uu sleep()通常用于选择要存储的对象的哪些部分,然后u wakeup()用于恢复数据库连接 这就是我变得模糊的地方。我认为serialize()和unser

我正在尝试持久化一个名为Authorizer的大型类,该类包含对数据库连接的引用和表示一组复杂数据库查询结果的其他对象的容器。我想序列化在会话中构建此对象的部分所需的开销。然后,当我需要问授权人一个问题时,我想唤醒授权人对象,而不是为每个页面构建一个新的问题。我正在编写一个自定义处理程序,将此对象临时存储在数据库表中。我知道神奇的方法uu sleep()通常用于选择要存储的对象的哪些部分,然后u wakeup()用于恢复数据库连接

这就是我变得模糊的地方。我认为serialize()和unserialize()应该可以工作,而不是构造函数和析构函数,但我不太明白它们是如何与_sleep()和_wakeup()交互的。然后,我看到了手册中描述可序列化接口的部分,我想好的,我将能够实现这一点,并确保我有这个权利。然后我读到实现这个接口的类不再支持_sleep()和_wakeup()!这是整个过程中我真正理解的唯一部分>:-{我找不到任何关于如何正确实现此接口的示例


因此,我的问题是,在一个完全面向对象的系统中,实现序列化的首选方法是什么?可序列化接口是用来取代旧方法的吗?拥有两组不同的函数(_sleep()/_wakeup()和serialize()/unserialize()的目的是什么?

\uuuu wakeup
由默认的
序列化
/
取消序列化
方法调用,以准备对象进行序列化。在默认PHP方法与您需要的方法非常接近的情况下,这种方法可以工作,您只需要在流程周围执行一些清理


如果您正在实现
可序列化
接口,那么不需要这些方法,因为您声明自己正在实现整个序列化过程。因此,通常在
\uuuu sleep
中完成的任何工作都将合并到
序列化
,而
\uuu wa也一样keup
取消序列化

那么序列化返回什么呢?我想不是像u sleep这样的数组。@以序列化形式生成对象;是常规的
序列化($obj)的对象
可以代替。@Michael Mior你是说我需要构建一个名称:值对的字符串。然后我可以以非序列化的方式重新构建它,对吗?是的,这是一个选项。但是,你可能会发现
\u sleep
\u wakeup
可以满足你的需要,因为有一个很好的机会
序列化
/
非序列化可能会让你达到99%的目标。