告诉我,如果我错了,但我很确定这是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'。你怎么看?
我不想要在子类中重新声明这个。
答案 0 :(得分:0)
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);
答案 1 :(得分:0)
我认为这是不可能的,但是如果你不想重新声明在构造函数中重新定义它...
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);