我不明白为什么在下面的代码中,$my_foo 和 $my_bar 被子类正确继承,但是如果我通过分配对 $my_var 的引用来更改 $my_foo,子类仍然看到原始值..
<?php
class Foo
{
public static $my_foo = 'foo';
public static $my_bar = 'bar';
public static function break_inheritance() {
self::$my_bar = &self::$my_foo;
}
public static function foo_print_vars() {
print self::$my_foo." ";
print self::$my_bar."\n";
}
}
class Bar extends Foo
{
public static function bar_print_vars() {
print self::$my_foo." ";
print self::$my_bar."\n";
}
}
Bar::bar_print_vars(); // OUTPUTS foo bar
Foo::break_inheritance();
Foo::foo_print_vars(); // OUTPUTS foo foo
Bar::bar_print_vars(); // OUTPUTS foo bar
编辑:这是一个类似的问题:do extended classes inherit static var values (PHP)?但我的更侧重于继承和引用。
EDIT2:请注意,这个问题的重点不是关于后期静态绑定(bind),而是因为 $my_foo 和 $my_bar 是继承的,所以在 Foo 中更改它们不会影响在 Bar 中访问它们的原因。而这只发生在引用中。事实上,如果我们改变:
public static function break_inheritance() {
self::$my_bar = self::$my_foo; // removed reference in assignment
}
行为完全改变,最后一个 Bar::bar_print_vars();//输出 foo foo
最佳答案
Foo 与 Bar 是不同的类。尝试调用 Bar::break_inheritance();
看看会发生什么。
关于php - 为什么分配对静态类变量的引用会破坏此类变量的继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29931722/