我尝试在每个实例中为一个类使用一个变量。
我的示例课程:
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)期间设置一些变量/数组,并在代码期间(每个用户请求)为每个实例设置一些变量/数组。
答案 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/
是正确的输出。