为什么在后期静态绑定 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 变量的值。
好吧,标题很难理解,但我想了解后期静态绑定,我看到了这个答案
这显示了这两个示例之间的区别:
注意,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
.
$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 变量的值。