PHP。子级的静态属性会覆盖父级的静态属性?有人可以解释一个理论吗?

时间:2019-10-23 01:07:19

标签: php

这是代码示例。在PHP 5.6,PHP 7.3中进行了测试。

class a {
    static public $prop = 'in a';
}

class b extends a {

}

a::$prop = 111;
b::$prop = 777;

print_r(a::$prop);

您认为我们会得到什么?

a::prop = 777 (!!!)

那怎么样?

  1. 我知道后期静态绑定主体,但有人可以指出 我是从理论上解释这种行为的?

  2. JAVA的行为是否相同?

  3. Python的行为是否相同?

谢谢。

[解决方案]

请,在下面查看我的评论:https://stackoverflow.com/a/59300364/3142281

2 个答案:

答案 0 :(得分:2)

实际上,这与后期静态绑定无关。当具有相同名称的属性或函数位于不同层次结构上时,就会发生LSB。

由于类b在访问$prop时未定义其自己的静态变量b::$prop,因此您访问了变量a::$prop,实际上是访问变量a::$prop。在这种情况下,b::$proprun都引用相同的变量。

是的,JAVA的行为方式相同。我不知道它在Python中如何工作,但我希望得到同样的结果。

答案 1 :(得分:0)

[解决方案]

我自己找到了解决方案! 请在这里查看评论: https://www.php.net/manual/en/language.oop5.traits.php#107965

  

与继承不同;如果特征具有静态属性,则每个类使用   该特征具有这些属性的独立实例。

更多单词... 因此,您可能可以想象,如果我们总是被迫重新定义静态字段,并且每次都扩展,则会出现什么继承问题。 特质似乎可以解决这个问题。