怎么理解PHP里的self呢?
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呢?先谢谢大家指点了
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
你的猜想二是对的.
PHP 静态绑定
实际上他们的原理是:
self 是针对当前本类的使用
this 是对当前类的调用,如果当前类没有,则找寻到父类去
复写一下就好理解
self:定义当前方法所在的类
static:运行时所在的类
简而言之 self指向的是当前类 this指向的是当前对象
self
是指首先使用父类属性static
是指首先使用当前类属性