为后期静态绑定复制函数
Duplicating functions for late static binding
我正在努力解决后期静态绑定问题,通过阅读几个堆栈溢出问题和手册,除了我不明白为什么,在我找到的所有示例中(包括manual),直接回显 classname 的方法在子 class.
中重复
我的理解是,从另一个扩展的 class 继承了其父级的所有方法和属性。因此,为什么在后期静态绑定的PHP手动示例中重复了who()方法。我意识到如果没有它,父 class 会被回显,但不明白为什么。
参见手册中的代码...
<?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() 方法,我认为它必须完全相同?提前致谢。
Late static binding
类似于虚方法调用,但它是静态的。
在classA,方法测试调用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
。
我正在努力解决后期静态绑定问题,通过阅读几个堆栈溢出问题和手册,除了我不明白为什么,在我找到的所有示例中(包括manual),直接回显 classname 的方法在子 class.
中重复我的理解是,从另一个扩展的 class 继承了其父级的所有方法和属性。因此,为什么在后期静态绑定的PHP手动示例中重复了who()方法。我意识到如果没有它,父 class 会被回显,但不明白为什么。
参见手册中的代码...
<?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() 方法,我认为它必须完全相同?提前致谢。
Late static binding
类似于虚方法调用,但它是静态的。
在classA,方法测试调用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
。