Php 覆盖父静态属性的子类

Php 覆盖父静态属性的子类,php,static,Php,Static,如果我错了,请告诉我,但我非常确定这是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 OP编辑的问题,这是他提到他

如果我错了,请告诉我,但我非常确定这是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
OP编辑的问题,这是他提到他不想重新申报财产之前的答案

这是因为
Two
One
共享
$var

如果您这样编写,那么您将获得所需的输出

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

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

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

我不想在子类中重新声明它。这怎么不重新声明
$var
,您在两个类中都声明了它?是的,我正在重新声明,但是它不会让您在每次出现时都更改var(当您必须时)因为我不明白他为什么不想重新声明。我不想重新声明,因为这是一个框架,我不能确定使用它的人是否会重新声明这个变量。然后你必须使它成为实例变量,而不是静态变量