为什么在后期静态绑定子类从父类和当前方法获取数据

好吧,标题很难理解,但我想了解后期静态绑定,我看到了这个答案https://stackoverflow.com/a/35577069/1640606

其中显示了这两个示例之间的区别:

请注意, self :: $ c

class A
{
    static $c = 7;

    public static function getVal()
    {
        return self::$c;
    }
}

class B extends A
{
    static $c = 8;
}

B::getVal(); // 7

后期静态绑定,请注意static :: $ c

class A
{
    static $c = 7;

    public static function getVal()
    {
        return static::$c;
    }
}

class B extends A
{
    static $c = 8;
}

B::getVal(); // 8

现在,我明白这一点,但我不明白的是,为什么B::getVal(); // 8 B::getVal(); // 8首先从类A获取getVal ,但似乎获得了在类B定义的值。

所以,``B :: getVal();`得到了类的方法,但是获得了第二个类的值。 我的问题是,这是后期静态绑定的真正目的,它有什么帮助解决


例1:

class A
{
    static $c = 7;

    public static function getVal()
    {
        return self::$c;
    }
}

class B extends A
{
    static $c = 8;
}

B::getVal(); // 7

在例1中它返回7,因为当你在B上调用getVal函数时,PHP在它的父类中找到它的声明,它使用操作符self从当前类返回$c的值。

例2:

class A
{
    static $c = 7;

    public static function getVal()
    {
        return static::$c;
    }
}

class B extends A
{
    static $c = 8;
}

B::getVal(); // 8

但在例2中,当你调用getVal时,php再次在它的父类中找到它的声明,但是类正在返回return static::$c ,这意味着返回调用它的类变量的值。

链接地址: http://www.djcxy.com/p/58047.html

上一篇: Why in late static binding child class gets data from parent and current methods

下一篇: Method Overriding vs Late Static Binding?