代码之家  ›  专栏  ›  技术社区  ›  Ramesh Kithsiri HettiArachchi

当我更改类的静态属性时,它也适用于同级类

  •  0
  • Ramesh Kithsiri HettiArachchi  · 技术社区  · 4 年前

    如果我错了,请告诉我,但我很确定这是PHP中的一个bug。

    <?php
    
    class One {
    
        public static $var = 'hi';
    }
    
    class Two extends One {
    
        public static function set($var) {
            static::$var = $var;
        }
    }
    
    Two::set('bye');
    
    var_dump(One::$var);
    // bye
    

    不要 想在子类中重新声明这个。

    0 回复  |  直到 12 年前
        1
  •  1
  •   Marko D    12 年前

    我的问题是,这是他提到他不想重新申报财产之前的答案

    Two 分享 $var 具有 One .

    如果你这样写的话,你会得到想要的输出

    class One {
    
        public static $var = 'hi';
    }
    
    class Two extends One {
    
        public static $var = 'hi';
    
        public static function set($var) {
            static::$var = $var;
        }
    }
    
    Two::set('bye');
    
    // you get hi
    var_dump(One::$var);
    // you get bye
    var_dump(Two::$var);
    
        2
  •  0
  •   Guilherme    12 年前

    我认为这是不可能的,但如果您不想重新声明,请在构造函数中定义它。。

    class One {
    
        public static $var = 'hi';
    }
    
    class Two extends One {
    
        public static $var;
    
        public function __construct(){
            self::$var = parent::$var;
        }
    
        public static function set($var) {
            self::$var = $var;
        }
    }
    
    Two::set('bye');
    
    var_dump(One::$var);
    var_dump(Two::$var);