session
其实PHP的对象功能很弱的,不如干脆面向过程,不要用对象了

解决方案 »

  1.   

    我想 $p=new ...  ;
    只要保存这个$p就可以了,session,cookie,隐藏表单方式都可以的,
    我试过在普通函数中用global $p;后,可以正常访问类中的方法。
      

  2.   

    没办法,只能通过对象来管理,不然不晓得怎么办:(
    我现在要管理一个对象数组
    是不是只要把数组名注册为session然后直接使用用这个数组名,就能够让数组中所有的对象都保存在session里面了呢??
      

  3.   

    可以将对象保存在session中
    var $myClass=new MyClass();
    session_register("myClass");
    这样就把myClass对象保存在了会话(session)中。不过这样一个代价是,你必须在每一个php脚本中包含对象的声明文件(比如MyClass.php),因为session是对每个php脚本可见的。可以这样优化:
        将对象序列化(serialize)后的字符串保存在session中,在另外一个需要此对象的页面中再反向(unserialize)生成这个对象,当然这个页面要包含MyClass.php。
        值得注意的是,对象中的部分信息比如对于mysql或其他数据源、文件的连接句柄会丢失,需要在对象中声明两个函数,__sleep()用于序列化时保存连接信息,__wakeup用于反向时重建连接。
      

  4.   

    补充:
    对象保存在session中,会自动被序列化serialize成一个字符串保存,再次被调用时自动unserialize(),所以同样存在上面提到的__sleep()保存或清除不必要的数据和__wakeup()恢复丢失的数据的问题。
      

  5.   

    纠正一下我的说法。你可以这样做:
    class.php 类定义文件
    <?php
    class A {
      var $v;
      function A($v) {
        $this->v = $v;
      }
      function show() {
        echo "$this->v ok";
      }
    }
    ?>file1.php
    <?php
    include "class.php";
    session_start();$p = new A(123);
    $_SESSION['p'] = $p;header("location: file2.php");
    ?>file2.php
    <?
    include "class.php";
    session_start();
    $p = $_SESSION['p'];
    $p->show();
    ?>至于ABabyStudio(ABabyStudio) 说的__sleep(),__wakeup()如何使用,还请他明示。
      

  6.   

    还是用session吧,比较方便实用。
    if(!session_is_registered("arrayname")) { // 如果不存在则新建 
    $arrayname=array();
    session_register("arrayname");
                      $arrayname[0]="abc";
                      $arrayname[1]="lmf";
                      ……
     }
    在下一个页面用session_start();
    就可以应用$arrayname数组了,很方便的。^_^
      

  7.   

    $a=mysql_fatch_object($rs);
    $_SESSION['b']=$a;
    echo $_SESSION['b']->name;