如您所知,当您在SESSION中自动序列化存储类定义时,并且在每个后续页面上都将反序列化。我应该在SPEED会话中存储我的PHP5对象,为什么?
我刚开始写类,我想知道: 要存储一个类在会话或文件与序列化是一个好主意?
如果是的话,我该如何储存,然后GET使用PHP5中的班级?
如您所知,当您在SESSION中自动序列化存储类定义时,并且在每个后续页面上都将反序列化。我应该在SPEED会话中存储我的PHP5对象,为什么?
我刚开始写类,我想知道: 要存储一个类在会话或文件与序列化是一个好主意?
如果是的话,我该如何储存,然后GET使用PHP5中的班级?
存储对象实例有以下缺点:
我宁愿将对象存储在专用的缓存中。查看Zend Cache类作为一个好的缓存库的例子。
如果你的对象使用资源(数据库连接,文件,gd图像),你的类应该实现接口Serializable
。然后你必须添加两个方法来完成清理和初始化工作。
您不会将类存储在会话变量中,但可以存储对象。请注意,如果您的对象具有引用资源(如文件句柄和数据库连接)的属性,则不会导致反序列化。
除非它是一个小班,可能不是(see this question for possible pitfalls with large sessions)。简而言之,会话并不是设计成一个缓存机制,当你将它们合并为一个时,它们表现得并不好。
请注意,如果您使用的是默认会话处理程序,则会话将存储在硬盘驱动器上 - 当您收到许多并发请求时,会话速度不会很快。另外(测试和度量),序列化/反序列化可能比正常的对象创建方法慢 - 请注意,您可能会反序列化两次:从会话到字符串,然后串入该类的对象。
如果您想要进行序列化/反序列化路由,请尝试改为Memcached。在会议