为什么在后期静态绑定 child class 从 parent 和当前方法获取数据

Why in late static binding child class gets data from parent and current methods

好吧,标题很难理解,但我想了解后期静态绑定,我看到了这个答案

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

注意,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 首先从 class A 得到 getVal,但似乎获取 class B.

中定义的值

因此,``B::getVal();` 正在获取 class 的方法,但获取第二个 class 的值。我的问题是,这是后期静态绑定的真正预期目的吗?它有助于解决什么问题

示例 1:

class A
{
    static $c = 7;

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

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

B::getVal(); // 7

在示例 1 中,它 returning 你 7 因为当你在 B 上调用 getVal 函数时,然后 PHP 在其父 class 中找到它的声明] 这是 return 使用运算符 self.

从当前 class 中 $c 的值

例二:

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 会在其父 class 中找到其声明,但 class 是 returning return static::$c 表示 return 调用它的 class 变量的值。