hgl 发表于 2012-8-22 14:12:23

控制器成员变量会丢失值 怎么回事?

我想用控制器的成员变量记录一些信息,示例代码如下:

class test extends CI_Controller {
    private $data;
    public function set($i) {
      $this->data = $i;
      $data = $this->data;
      echo "设置data为:$data";
      echo anchor('test/get', '查看data');
    }
    public function get() {
      $data = $this->data;
      echo "data为:$data";
    }
}

但是我用URL调用set()函数设定好$this->data的值之后,再用URL调用get(),结果总是发现 $this->data 没有值,页面显示只有:
data为:
后面没了。。。。

后来我怀疑是这样的:CI每次用URL调用test的成员函数时,都会生成新的test类实例,因此两个函数中 $this->data 对应不同实例中的成员$data。所有就对程序做了如下改动(把$data由成员改为了静态成员):
class test extends CI_Controller {
    static private $data;
    public function set($i) {
      self::$data = $i;
      $data = self::$data;
      echo "设置data为:$data";
      echo anchor('test/get', '查看data');
    }
    public function get() {
      $data = self::$data;
      echo "data为:$data";
    }
}
但是还是不行,结果一样。这就感觉有点无法解释了。。。

请问大家该怎么解决!

qq494686707 发表于 2012-8-22 18:14:28

可以用 session 来传递值

hgl 发表于 2012-8-22 21:54:08

qq494686707 发表于 2012-8-22 18:14 static/image/common/back.gif
可以用 session 来传递值

嗯,我也想过这个方案,主要觉得没有直接用类成员传值优雅快捷、不易混淆
页: [1]
查看完整版本: 控制器成员变量会丢失值 怎么回事?