代码在这里:
class A {
public static $property = 1;
public function test(){
echo self::$property;
}
}
class B extends A{
public static $property = 2;
}
$b = new B();
echo $b->test() . "\n";
控制台日志:
$:1
我知道类B
已覆盖静态属性。
这个结果的原因是什么?
答案 0 :(得分:1)
添加后
`echo self::$property;`
到test()
A
无论你是否覆盖扩展类中的静态变量的值,它都将引用父类值但是当你将其更改为
`echo static::$property;`
它将根据类对象给出值。more info here
试试这个: DEMO
答案 1 :(得分:0)
对于静态方法/变量,
- self与$ this相同,但始终作用于定义类。
对于静态方法/ varialbes,- static与$ this相同,但总是作用于调用类(这称为后期静态绑定,这是php的一个相对较新的特性
来源:Read article
如果你想从你做的对象的类中回显值,你可以使用下面的,
class A {
public static $property = 1;
public function test(){
echo static::$property; // changed self to static
}
}
希望你能理解!感谢。