用户
 找回密码
 入住 CI 中国社区
搜索
查看: 2114|回复: 2
收起左侧

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

[复制链接]
发表于 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";
    }
}
但是还是不行,结果一样。这就感觉有点无法解释了。。。

请问大家该怎么解决!
发表于 2012-8-22 18:14:28 | 显示全部楼层
可以用 session 来传递值
 楼主| 发表于 2012-8-22 21:54:08 | 显示全部楼层
qq494686707 发表于 2012-8-22 18:14
可以用 session 来传递值

嗯,我也想过这个方案,主要觉得没有直接用类成员传值优雅快捷、不易混淆

本版积分规则