这么快就有人回复了,首先多谢楼上的,类是一个非常简单的初始化
class qa_user{
var $user_id="";
function qa_user(){
}
function getUser_id(){
return $this->user_id;
}
function setUser_id($id){
$this->user_id=$id;
}
}
其他的方法没有列出。
class qa_user{
var $user_id="";
function qa_user(){
}
function getUser_id(){
return $this->user_id;
}
function setUser_id($id){
$this->user_id=$id;
}
}
其他的方法没有列出。
这行有问题.
$user_info是你实例化类的对象,怎么直接把session的值传给$user_info呢.
user_id 没有事先定义
实例化的类是个对象,$_SESSION['subscribe']我猜测可能是个字符串或者数字吧,你把数字和字符串赋值给类实例的对象了.
哪个对象就已经被破坏了,怎么可能还会再调用类的成员函数呢.
去掉这行,就OK
$user=$userdb->getUserInfo($userid);(其中$userdb->getUserInfo($userid)返回的是一个qa_user类)
$_SESSION['subscribe']=$user;
其实我这个问题出现的挺怪异的,我上一次登录的时候还是好用的,3天没有懂过这个代码,在回来的时候就出现这个问题了,
由于程序是分模块多人一起开发的 有没有可能是别的模块改动影响我这部分呢 ?
http://blog.sevenight.com/index.php?m=blog&a=show&id=30注意resource类型的对象不能序列化保存在session里.
$user_info = new qa_user();
$_SESSION['subscribe'] = base64_encode(serialize($user_info));
引用的时候session_start();
$user_info = unserialize(base64_decode($_SESSION['subscribe']));
你重定义了这个变量
常规的可以样$user_info=new qa_user($_SESSION['subscribe']); 这要求你类里有构造函数
另外有函数根据这个名字取出相关信息类里有属性,方法,调用参数
MS直接写是不可以的,序列化以后,类的实例可以传递,但resource类型的不行.比如说数据库连接.
给你的类的一属性赋值
要弄懂你的类,再去用它!看不懂的,就不要轻易用!
=====================================================
请确认你试图操作的这个类对象已经在反序列化或者提供一个自动调用函数来调用类定义.
都出这个错误了.
echo "<pre>";
print_r($user_information);
echo "</pre>";
输出一个空的session 并没有输出$_SESSION['subscribe']的值
另外你可以去我的blog哪个页面看看,
哪是m2f保存一个类的实例的写法.
麻烦讲的再细一点好吗 多谢了。。
session_start();
require_once "test.php";
//实例化对象
$user_info = new qa_user();
//给成员变量传值
$user_info->setUser_id(3333);
$_SESSION['subscribe'] = base64_encode(serialize($user_info));
var_dump($user_info);require_once "test.php";
session_start();
//反序列化,取出保存类的实例
$user_info = unserialize(base64_decode($_SESSION['subscribe']));
//查看类的内容
var_dump($user_info);
//测试是不是输出333
echo $user_info->getUser_id();
$user_info =$_SESSION['subscribe'];居然也能正确输出,不知道为什么
"我php版本是5.2.6 序列化好像是自动的 不需要显示声明"
这个我没有验证,呵呵.
可能就如你所说吧.
在你显示或者要用$_SESSION['subscribe']的那个页面include一下那个类的原型就可以了