php - 为什么分配对静态类变量的引用会破坏此类变量的继承?

标签 php inheritance reference static

我不明白为什么在下面的代码中,$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/

相关文章:

PHP 对 REST API 的多个 cURL 请求停止

javascript - 谷歌地图静态api url长度超过2048个字符有什么解决办法吗?目的是另存为图像

c++ - 我在解释 N4140 的§8.5.3/5 段中的要点 (5.2.1.1) 时遇到了一些困难

c++ - 编译器是否不允许假定 const-ref 参数将保持常量?

c++ - 模板特化和引用

php - 有什么安全的方法可以允许跨站点 AJAX 请求吗?

php - 将爬虫指向 HTML 快照

java - 检查 Class 对象是否是 Java 中另一个 Class 对象的子类型?

c++ - 覆盖私有(private)函数

java - Hibernate: OneToOne: 同一类型的两个字段