静态属性如何从父级扩展?

时间:2017-01-19 06:16:30

标签: php

代码在这里:

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已覆盖静态属性。

这个结果的原因是什么?

2 个答案:

答案 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
    }
}
希望你能理解!感谢。