为了账号安全,请及时绑定邮箱和手机立即绑定

怎么理解PHP里的self呢?

怎么理解PHP里的self呢?

呼如林 2018-07-10 09:09:57
 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贡献1852条经验 获得超1个赞

使用 self:: 或者 CLASS 对当前类的静态引用,取决于定义当前方法所在的类

你的猜想二是对的.


查看完整回答
反对 回复 2018-07-20
?
慕少森

TA贡献2019条经验 获得超9个赞

实际上他们的原理是:
self 是针对当前本类的使用
this 是对当前类的调用,如果当前类没有,则找寻到父类去

查看完整回答
反对 回复 2018-07-20
?
动漫人物

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();

复写一下就好理解


查看完整回答
反对 回复 2018-07-20
  • 3 回答
  • 0 关注
  • 1232 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信