比如作一个简单的后台系统,
 我在登陆界面创建一个对象,传递给_SESSION;
 如
 session_start();
 $mgr = $_SESSION['mgr'];
 if(!isset($mgr))
 {
   $mgr = new CManager();
 }
 ...... 这样在每个页面中直接使用$_SESSION['mgr'],就像MFC的theApp;
 在CManager这个类中我定义了自己的属性和方法,有访问数据库的操作, 这样写的目的是只要创建一个$mgr对象传递给$_SESSION['mgr'],就可以在不同页面之间使用这个对象,
 
 问题是现在这么写好象有问题,就是CManager内部数据库对象回自动释放,这意味着我只要含有数据库操作的方法,
  
 就必须每次做 连接数据库-查询-更新的操作。 其实我的问题就是,如果我在CManager的构造函数内连接了数据库并保存了这个返回的mysql对象作为类的属性 变得毫无意义,因为一旦页面跳转后刷新这个对象就会自动释放。 各位是如何在不同页面之间传递对象的呢?请赐教!!

解决方案 »

  1.   

    是的 CManager 内部数据库对象会自动释放,这意味着只要含有数据库操作的方法,就必须每次做 连接数据库-查询-更新的操作。
    这种设计的原因是因为 HTTP 是无状态协议,每次 HTTP 对话都是独立的。所以每次 HTTP 通讯结束后都应该释放通讯时所占用的资源。否则将造成极大的资源浪费当将对象序列化(SESSION也是序列化)时,应该重载对象的 __wakeup 方法,以便在对象恢复时自动完成先前的数据库连接和查询手册的 Magic Methods 章节有完整的实例,你可以看一下×× 使用 __wakeup 的目的是重建在序列化中可能丢失的任何数据库连接以及处理其它重新初始化的任务。