Php 覆盖父静态属性的子类
如果我错了,请告诉我,但我非常确定这是PHP中的一个bugPhp 覆盖父静态属性的子类,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
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(当您必须时)因为我不明白他为什么不想重新声明。我不想重新声明,因为这是一个框架,我不能确定使用它的人是否会重新声明这个变量。然后你必须使它成为实例变量,而不是静态变量