class A { const STR = "A"; public function x() { echo self::STR;
}
} class B extends A{ const STR = "B";
}
(new B)->x();最后输出结果是A,该怎么理解这个呢?猜想一:self在编译时会绑定为当前类,可理解成编译时所有的self替换为所处类名,这样别的类继承父类方法后,方法代码里并不是self::xxx,而是父类名::xxx所以例子里的str就是父类里的str猜想二:子类继承父类方法,其实并不是把父类方法拿过来,而是有了父类方法的访问权限,当调用子类里没有的方法时,会去父类里找,找到后在父类里执行,自然就self指向父类这两种到底哪种对呢?如果都不对的话应该怎么理解self呢?先谢谢大家指点了
3 回答
动漫人物
TA贡献1815条经验 获得超10个赞
<?phpclass A { const STR = "A"; public function x() { echo self::STR; } }class B extends A{ const STR = "B"; public function x() { echo self::STR; } } (new B)->x();
复写一下就好理解
- 3 回答
- 0 关注
- 1294 浏览
添加回答
举报
0/150
提交
取消