【问题标题】:shared variable across multiple class instances that I can change outside the class跨多个类实例的共享变量,我可以在类外更改
【发布时间】:2011-09-28 09:21:42
【问题描述】:

代码解释得更好:

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

可以吗

【问题讨论】:

    标签: php oop class variables


    【解决方案1】:

    静态。 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
    

    【讨论】:

    • 谢谢,这真的很有帮助。
    【解决方案2】:

    您应该能够使用静态成员变量来做到这一点。

    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';
    

    【讨论】:

      【解决方案3】:

      您应该将$var 声明为static

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

      【讨论】:

        【解决方案4】:

        你可以使用静态变量:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-10-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多