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