我正在尝试在$_SESSION
中保存对象,但以下内容:
<?php
$user = db->load( $username, $pass ) ;
$_SESSION[ 'user' ] = $user ;
# on subsequent page loads:
$user = $_SESSION[ 'user' ] ; #retrieve the user from session
不幸的是,这不起作用。
该脚本尝试执行方法或访问不完整对象的属性。请确保加载了_before_ unserialize()被调用的对象的类定义“User”,或者提供__autoload()函数来加载类定义
除非你使用serialize():
<?php
$user = db->load( $username, $pass ) ;
$_SESSION[ 'user' ] = serialize( $user ) ;
# on subsequent page loads:
$user = unserialize( $_SESSION[ 'user' ] ) ; #retrieve the user from session
我假设需要序列化,因为会话信息已保存到磁盘。但PHP不应该足够智能自行序列化东西吗?
使用序列化 / _ 取消序列化 _,这现在可靠吗?或者我的PHP类需要__serialize()
方法吗?
答案 0 :(得分:4)
如果您的对象需要在序列化之前执行某些操作,那么您的类中需要__serialize()
。例如,如果它有一个打开文件的引用,那么在序列化之前需要正确关闭该文件。
答案 1 :(得分:1)
你可以使用var_export吗?我今天才刚刚了解它,所以也许它并不是那么相关。
答案 2 :(得分:0)
就php编译器而言,你所做的只是将一个对象(序列化)写入一个数组,它是一个不同的进程,确保$ _SESSION在下一页可用。序列化与写入磁盘无关,与内存有关,因为分配给对象上各种方法的内存将无法在下一页上使用。序列化是PHP在页面上保存对象的方式,您必须自己完成。
答案 3 :(得分:0)
更好地使用
json_encode() json_decode()
答案 4 :(得分:0)
目前最好的方法可能是与您的班级实施Serializable界面。