怎么理解PHP里的self呢?

发布于 2022-09-07 16:50:20 字数 531 浏览 15 评论 0

    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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

三人与歌 2022-09-14 16:50:20

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

你的猜想二是对的.

PHP 静态绑定

秋凉 2022-09-14 16:50:20

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

情感失落者 2022-09-14 16:50:20
<?php
class 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();

复写一下就好理解

影子是时光的心 2022-09-14 16:50:20

self:定义当前方法所在的类
static:运行时所在的类

夜夜流光相皎洁 2022-09-14 16:50:20

简而言之 self指向的是当前类 this指向的是当前对象

太阳哥哥 2022-09-14 16:50:20

self是指首先使用父类属性
static是指首先使用当前类属性

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文