我不知道发生了什么,但它是非常令人沮丧。 我的代码:
class Catalog extends CI_Model {
private $tree_selected_item = 1;
public function get_tree_item_selected() {
return empty($this->tree_selected_item) ? 1 : $this->
public function set_tree_item_selected($i){
$this->tree_selected_item = $i;
}
因此,我可以使用的地方我想这样做:
$this->catalog->set_tree_item_selected($i);
$selected = $this->catalog->get_tree_item_selected();
问题是,我可以改变这个变量的值。 但是,当我浏览到另一个页面,这个变量重置为其原始值:1。为什么呢?
看来,模型加载每次? 所以变量总是被限定为1?
我试图而不设定值,然后当我得到的变量返回null。
我不知道什么尝试
PHP是,本质上,无状态的。 这意味着,对于每一个请求,你使用的所有类的新实例将被创建和初始化中的定义, class {}
的代码位。 由于类声明,并初始化属性,如下:
private $tree_selected_item = 1;
你说你已经尝试不分配一个值,这就造成了吸气returing null
。 这又是可以预料的:未初始化的PHP变量实际上初始化为null
默认情况下。 如同JavaScript变量初始化为undefined
。
无论如何,这一切意味着每个实例将开始出生活与tree_selected_item
如果你想跟踪的请求之间的值设置为1,你将不得不使用$_POST
, $_GET
, $_COOKIE
或最好$_SESSION
来存储数据。 然后,你只需定义你的类的构造函数,把你想作为参数,即值:
public function __constructor($treeItem = 1)
{
$this->tree_selected_item = (int) $treeItem;
}
看到你已经标记了这个问题笨 ,你可能想改变你的编码风格,以符合该标准的笨 。 含义奥尔曼风格的压痕(打开{
我们去一个单独的行和所有)。
所以每当你需要的值tree_selected_item
在请求之间持续存在,你就必须做这样的事情(我没有使用CI,所以我不得不把它留给你的代码转换到CI-做事的方式):
//session_start(); should be called prior to this point
$_SESSION['treeItem'] = $instance->get_tree_selected_item();
这样一来下一个请求,你能正确初始化实例:
//again, you need a session_start call
$instance = new Catalog($_SESSION['treeItem']);
当然,你会发现,随着应用的增长,要存储值的绝对数量变得相当大。 这是在这一点上,你将开始使用会话作为一种手段来识别用户,并使用DB来存储所有的相关数据。 这就是为什么PHP是传统上用于同步进行各种各样的DB(即LA(N)MP堆栈 - Linux操作系统(服务器操作系统)的Apache(Web服务器)(否)MySQL和PHP,应用程序逻辑)