【发布时间】:2017-12-14 02:52:03
【问题描述】:
下面的代码是Example #4 from the PHP documentation on late static bindings。
<?php
class A {
public static function foo() {
static::who();
}
public static function who() {
echo __CLASS__."\n";
}
}
class B extends A {
public static function test() {
A::foo();
parent::foo();
self::foo();
}
public static function who() {
echo __CLASS__."\n";
}
}
class C extends B {
public static function who() {
echo __CLASS__."\n";
}
}
C::test();
我的问题是为什么输出是“ACC”而不是“ABC”。期待您的帮助!
【问题讨论】:
-
函数通过self和parent在C范围内执行,所以CLASS返回C
-
文档(您从中复制但未注明出处)解释了转发呼叫和非转发呼叫之间的区别,并以该代码为例说明其工作原理。如果您需要帮助,请解释为什么包含此示例的文档和示例说明无法解决您的问题。