Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一个用户请求期间php中的静态变量_Php - Fatal编程技术网

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

一个用户请求期间php中的静态变量,php,Php,我尝试在类的每个实例中使用一个变量 我的示例类: class test { private static $gvalue; function setValue($value) { $this->gvalue = $value; } function getValue() { return $this->gvalue; } } 现在,我创建了这个类测试的实例,并打印出一些值 $obj = n

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

我的示例类:

class test {
    private static $gvalue;

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

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

}
现在,我创建了这个类测试的实例,并打印出一些值

$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中是不可能的? 最后一个进球。我想在创建实例的过程中设置一些变量/数组,并在每个用户请求的代码过程中为每个实例设置这些变量/数组

您仅为$obj设置$gvalue:

当您回显$obj2->getValue时;$gvalue的值仍然为空,因为您没有将其设置为$obj2

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

1: / 2: green/
是正确的输出。

您仅为$obj设置$gvalue:

当您回显$obj2->getValue时;$gvalue的值仍然为空,因为您没有将其设置为$obj2

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

1: / 2: green/

是正确的输出。

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

<?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());

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

<?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());

使用静态变量时,只能使用双冒号::来处理静态变量,因为静态变量与整个类关联,而不是特定对象。这就是为什么不使用$self来访问它们。当使用静态变量时,只能使用双冒号::来处理静态变量。静态变量与整个类相关联,而不是与特定对象相关联。这就是为什么你不使用$self来访问它们。@arkascha啊,我明白了。我将把这个答案留在这里以供补充,你的答案是正确的。@arkascha啊,我明白了。我将把这个答案留在这里以供参考,你的答案是正确的。