一个用户请求期间php中的静态变量

时间:2017-09-09 07:16:43

标签: php

我尝试在每个实例中为一个类使用一个变量。

我的示例课程:

class test {
    private static $gvalue;

    function setValue($value)
    {
        $this->gvalue = $value;
    }

    function getValue()
    {
        return $this->gvalue;
    }

}

现在我创建了这个类“test”的实例并打印出一些值。

$obj = new test();
$obj2 = new test();
echo "1: ";
echo $obj->getValue();
echo " / ";
echo $obj2->getValue();
$obj->setValue("green");
echo "<BR>2: ";
echo $obj->getValue();
echo "/";
echo $obj2->getValue();

我的期望是获得以下输出:

1:/ 2:绿色/绿色

但结果是:

1:/ 2:绿色/

我明白了什么不对吗?或者在PHP中不可能? 目标最后。我想在创建实例(__construc)期间设置一些变量/数组,并在代码期间(每个用户请求)为每个实例设置一些变量/数组。

2 个答案:

答案 0 :(得分:4)

您必须更改方法实现中访问静态属性的方式:

<?php

class Test {
  private static $gvalue;

  function setValue($value) {
    self::$gvalue = $value;
  }

  function getValue() {
    return self::$gvalue;
  }
}

$obj1 = new Test();
$obj2 = new Test();
echo sprintf("1: %s/%s\n", $obj1->getValue(), $obj2->getValue());

$obj1->setValue("green");
echo sprintf("2: %s/%s\n", $obj1->getValue(), $obj2->getValue());

输出是:

1: /
2: green/green

答案 1 :(得分:0)

您只为$gvalue设置了$obj

$obj->setValue("green");

echo $obj2->getValue(); $gvalue的值仍为空时,因为您没有为$obj2设置它。

$obj$obj2都是同一个类的不同实例。它们具有相同的特征等,但它们可以具有不同的值。因此你得到的输出:

1: / 2: green/

是正确的输出。