PHP 的 new static 和 new self 具体有什么?

下面我们举个栗子:

class Father {
    public static function getSelf() {
        return new self();
    }

    public static function getStatic() {
        return new static();
    }
}

class Son extends Father {}

echo get_class(Son::getSelf()); // Father
echo get_class(Son::getStatic()); // Son
echo get_class(Father::getSelf()); // Father
echo get_class(Father::getStatic()); // Father

new self

这里面注意这一行 get_class(Son::getStatic()); 返回的是 Son 这个 class,可以总结如下:
self 返回的是 new self 中关键字 new 所在的类中,比如这里例子的 :

public static function getSelf() {
    return new self(); // new 关键字在 Father 这里
}

始终返回 Father

new static

static 则上面的基础上,更聪明一点点:static 会返回执行 new static() 的类,比如 Son 执行 get_class(Son::getStatic()) 返回的是 Son, Father 执行get_class(Father::getStatic()) 返回的是 Father

而在没有继承的情况下,可以认为 new selfnew static 是返回相同的结果。

原文地址:PHP 的 new static 和 new self 具体有什么?

本作品采用《CC 协议》,转载必须注明作者和本文链接

不要轻易放弃。学习成长的路上,我们长路漫漫,只因学无止境

Don't give up easily. On the way of learning and growing up, we have a long way to go, just because there is no end to learning.

本帖由系统于 9个月前 自动加精
vinhson
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 7

这个有个专有名词叫做:后期静态绑定,,,其实很简单的一个道理,被官方文档这么一个词一搞,我当时也晕了,,,

1年前 评论

这个有个专有名词叫做:后期静态绑定,,,其实很简单的一个道理,被官方文档这么一个词一搞,我当时也晕了,,,

1年前 评论

static 延迟静态绑定,有时候很有用的。 :grin:

1年前 评论
LOST

感谢大佬科普,后期静态绑定在框架里用的还是挺多的。

1年前 评论

其实就是 self: 返回当前方法所在的类,static:哪个类调用 就返回哪个类的区别

1年前 评论
fatrbaby

延迟绑定,比较基础的知识点。

9个月前 评论
jiangjun

不错,今天看到代码里面就有。解答了今天的疑惑。

9个月前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!