这么快就有人回复了,首先多谢楼上的,类是一个非常简单的初始化 
class qa_user{
  var $user_id="";
  function qa_user(){
  }
  
  function getUser_id(){
    return $this->user_id;
  }
  function setUser_id($id){
    $this->user_id=$id;
  }
}
其他的方法没有列出。

解决方案 »

  1.   

    $user_info=$_SESSION['subscribe']; 
    这行有问题.
    $user_info是你实例化类的对象,怎么直接把session的值传给$user_info呢.
      

  2.   

    类定义有问题或没有初始化getUser_id()比如这个方法,有没有参数,参数有没有定义或初如化,按你例子,显示是没有初始化的,
    user_id 没有事先定义
      

  3.   

    问题确实是出在$user_info=$_SESSION['subscribe']这句上,$user_info不是一个完整的类,调用方法$user_info->getUser_id()的时候出错 ,请问怎么才能让类$user_info 是一个完整的类呢? 多谢
      

  4.   

    好像类的定义没有问题,在别的地方也会用到这个类, 都没有问题的  只是在session这里有问题 
      

  5.   

    楼上还不太明白.
    实例化的类是个对象,$_SESSION['subscribe']我猜测可能是个字符串或者数字吧,你把数字和字符串赋值给类实例的对象了.
    哪个对象就已经被破坏了,怎么可能还会再调用类的成员函数呢.
    去掉这行,就OK
      

  6.   

    $_SESSION['subscribe']也是一个qa_user类 初始化代码是这样的:
      $user=$userdb->getUserInfo($userid);(其中$userdb->getUserInfo($userid)返回的是一个qa_user类)
      $_SESSION['subscribe']=$user;
      

  7.   

    qa_user 类应该是没什么问题的 之前一直在用这个类  
    其实我这个问题出现的挺怪异的,我上一次登录的时候还是好用的,3天没有懂过这个代码,在回来的时候就出现这个问题了,
    由于程序是分模块多人一起开发的 有没有可能是别的模块改动影响我这部分呢 ?
      

  8.   

    $_SESSION['subscribe']如果是类的话,要序列化才能行的.查看一下,我写的blog,有关于序列化对象和数组的实例.
    http://blog.sevenight.com/index.php?m=blog&a=show&id=30注意resource类型的对象不能序列化保存在session里.
      

  9.   

    先序列化,base64编码以后传给sessionsession_start();
    $user_info = new  qa_user();
    $_SESSION['subscribe'] = base64_encode(serialize($user_info));
    引用的时候session_start();
    $user_info = unserialize(base64_decode($_SESSION['subscribe']));
      

  10.   

    自由火说的对$user_info=new qa_user(); $user_info=$_SESSION['subscribe']; 
    你重定义了这个变量
    常规的可以样$user_info=new qa_user($_SESSION['subscribe']); 这要求你类里有构造函数
    另外有函数根据这个名字取出相关信息类里有属性,方法,调用参数
      

  11.   

    $user_info=new qa_user(); $user_info=$_SESSION['subscribe'];可以这样给类传值?
      

  12.   


    MS直接写是不可以的,序列化以后,类的实例可以传递,但resource类型的不行.比如说数据库连接.
      

  13.   

    两位高手下午好,我php版本是5.2.6 序列化好像是自动的 不需要显示声明
      

  14.   

    调用有问题的$user_info=$_SESSION['subscribe'];估计可能是这样的$user_info->attri(类的一个属性)=$_SESSION['subscribe'];  //
    给你的类的一属性赋值
    要弄懂你的类,再去用它!看不懂的,就不要轻易用!
      

  15.   

    支不支持,你先加上我上面所说的序列号过程以后看看. Please ensure that the class definition "qa_user" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition。 
    =====================================================
    请确认你试图操作的这个类对象已经在反序列化或者提供一个自动调用函数来调用类定义.
    都出这个错误了.
      

  16.   

    是不是这个意思 我把session赋初值的代码改成$_SESSION['subscribe']=base64_encode(serialize($user))了,其中user是一个qa_user类  然后把读session值的代码改成$user_information=new qa_user(base64_decode(unserialize($_SESSION['subscribe']))); 改成这样以后
            echo "<pre>";
    print_r($user_information);
    echo "</pre>";
    输出一个空的session 并没有输出$_SESSION['subscribe']的值
      

  17.   

    12楼我已经写得很清楚了,可是你非得自己再多加点什么.
    另外你可以去我的blog哪个页面看看,
    哪是m2f保存一个类的实例的写法.
      

  18.   

    对不起,我是新手,不太明白你的意思。我是按12楼的方法编码后给session 读session的时候也是先反序列化再赋值 
    麻烦讲的再细一点好吗 多谢了。。
      

  19.   


    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();
      

  20.   

    测试过上面的代码了  可以输出333   但是我试着改成$_SESSION['subscribe'] =$user_info;    
    $user_info =$_SESSION['subscribe'];居然也能正确输出,不知道为什么 
      

  21.   

    你不是说
    "我php版本是5.2.6 序列化好像是自动的 不需要显示声明"
    这个我没有验证,呵呵.
    可能就如你所说吧.
      

  22.   

    LZ这个我可以很明确的回答你
    在你显示或者要用$_SESSION['subscribe']的那个页面include一下那个类的原型就可以了