一个用户请求期间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啊,我明白了。我将把这个答案留在这里以供参考,你的答案是正确的。