为什么在后期静态绑定子类从父类和当前方法获取数据
好吧,标题很难理解,但我想了解后期静态绑定,我看到了这个答案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
,这意味着返回调用它的类变量的值。
上一篇: Why in late static binding child class gets data from parent and current methods