猿问

怎么理解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呢?先谢谢大家指点了


一只甜甜圈
浏览 536回答 2
2回答

呼如林

<?phpclass A {&nbsp; &nbsp; const STR = "A";&nbsp; &nbsp; public function x() {&nbsp; &nbsp; &nbsp; &nbsp; echo self::STR;&nbsp; &nbsp; }}class B extends A{&nbsp; &nbsp; const STR = "B"; &nbsp;&nbsp; &nbsp; public function x() {&nbsp; &nbsp; &nbsp; &nbsp; echo self::STR;&nbsp; &nbsp; } &nbsp;}(new B)->x();复写一下就好理解

子衿沉夜

实际上他们的原理是:self 是针对当前本类的使用this 是对当前类的调用,如果当前类没有,则找寻到父类去
随时随地看视频慕课网APP
我要回答