如果我错了请告诉我,但我很确定这是 PHP 中的错误。
<?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
当我非常确定它应该输出“hi”时,该脚本输出“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);
关于php - 子类覆盖父静态属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15174870/