子类覆盖父静态属性
问题描述:
告诉我,如果我错了,但我很确定这是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
股$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);
答
我认为这是不可能的,但如果你不想重新声明简单的构造函数定义它..
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);
我不想在子类中重新声明它。 – Nathaniel 2013-03-02 13:50:14
不可能我很害怕。 – 2013-03-02 13:59:46