跨多个类实例的共享变量,我可以在类外部进行更改

时间:2011-07-04 20:47:43

标签: php oop class variables

代码更好地解释了:

class Class{
  $var = 0;

  function getvar()
    echo $this->var;
  }

}



$inst1 = new Class();

// I want to change $var here to 5

$inst2 = new Class();

echo $inst2->getvar(); // should be 5

是否可能

4 个答案:

答案 0 :(得分:15)

静态。 http://php.net/manual/en/language.oop5.static.php

class MyClass {
    public static $var = 0;

    function setVar($value) {
        self::$var = $value;
    }

    function getVar() {
        return self::$var;
    }
}

echo MyClass::$var;
MyClass::setVar(1);
echo MyClass::getVar();  //Outputs 1

答案 1 :(得分:5)

您应该能够使用静态成员变量执行此操作。

class foo {
  private static $var;

  public static setVar($value) {
    self::$var = $value;
  }

  public static getVar() {
    return self::$var;
  }
}

$a = new foo;
$a::setVar('bar');

$b = new foo;
echo $b::getVar();
// should echo 'bar';

答案 2 :(得分:2)

您应该将$var声明为static

  

通常的数据成员   可用于类的所有对象   称为静态成员。与常规不同   数据成员,静态成员共享   所有对象之间的内存空间   同一个班级。

答案 3 :(得分:1)

您可以使用静态变量:

class AAA{
  public static $var = 0;

  function getvar() {
    return AAA::$var;
  }

}

AAA::$var = "test";

$a1 = new AAA();
var_dump($a1->getvar());
var_dump(AAA::$var);