.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

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

由于类b没有定义自己的静态变量$prop当您访问b::$prop时,您会失败,实际上访问变量a::$prop。在这种情况下,a::$propb::$prop都引用同一个变量。

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

[解决方案]

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

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

再说几句... 所以,你大概可以想象,如果我们总是被迫重新定义静态字段,每次都扩展,会出现什么样的继承问题。 特质似乎可以非常简洁地解决这个问题。

相关内容

  • 没有找到相关文章