class Base {
public function log() {
// 目标类,输出:A/C
echo static::class;
// 基类,输出:Base
//echo __CLASS__;
echo self::class;
}
}
class A extends Base {
public function log1() {
echo self::class;
}
}
class C extends A {
public function log2() {
echo self::class;
}
}
$a = new A();$c = new C();
$a->log(); //输出 A Base
$c->log(); //输出 C Base
$c->log1(); //输出 A
$c->log2(); //输出 C
self 指向基类 Fruit,也就是
__CLASS__
的类static、$this 指向最终new的类 Apple
以下这个类 你就明白了:
因为
Apple
类中没有showColor
这个方法,运行时,就去其父类里面找,找到了这个showColor
,于是就调用了,由于用的self::color
也就是说调用的是本类(也就是父类Fruit
)中的color
。覆盖方法没有调用,肯定是原始值