复制后期静态绑定的函数

时间:2015-07-01 20:42:20

标签: php mysql class late-static-binding

我试图深入了解静态绑定,并通过阅读几个堆栈溢出问题和手册,除了我之外,我不知道为什么,在我找到的所有示例中(包括手动),直接回显类名的方法在子类中重复。

我的理解是,从另一个扩展的类继承了它的父级的所有方法和属性。因此,为什么who()方法在PHP手册的后期静态绑定示例中重复。我意识到没有它,父类会得到回应,但却无法理解为什么。

请参阅手册中的代码......

<?php
class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        static::who(); // Here comes Late Static Bindings
    }
}

class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test();
?>

为什么需要重写who()方法,我认为它必须是相同的?提前谢谢。

1 个答案:

答案 0 :(得分:3)

Late static binding类似于虚方法调用,但它是静态的。

在A类中,方法测试调用two()。 two()必须显示“A”。 但是,因为这与虚方法类似,所以会执行B::two()

这几乎是相同的代码,但我相信更清楚的是:

<?php
class A {
    public static function process() {
        echo "AAAA";
    }
    public static function test() {
        static::process(); // Here comes Late Static Bindings
    }
}

class B extends A {
    public static function process() {
        echo "BBBB";
    }
}

B::test();

执行时会打印BBBB