PHP new static 和 new self详解
程序员文章站
2022-03-10 13:52:49
...
使用 self:: 或者 __CLASS__ 对当前类的静态引用,取决于定义当前方法所在的类:使用 static:: 不再被解析为定义当前方法所在的类,而是在实际运行时计算的。也可以称之为“静态绑定”,因为它可以用于(但不限于)静态方法的调用。
最近在一个视频的评论被问到一个小问题:这里选择用static 而不是self有特殊的考虑么?或者我们可以这样转换一下问题:
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
这里面注意这一行 get_class(Son::getStatic());
返回的是 Son
这个 class,可以总结如下:
new self
1.self
返回的是 new self
中关键字 new
所在的类中,比如这里例子的 :
public static function getSelf() { return new self(); // new 关键字在 Father 这里 }
始终返回 Father
。
new static
2.static
则上面的基础上,更聪明一点点:static
会返回执行 new static()
的类,比如 Son
执行 get_class(Son::getStatic())
返回的是 Son
, Father
执行 get_class(Father::getStatic())
返回的是 Father
而在没有继承的情况下,可以认为 new self
和 new static
是返回相同的结果。
Tips: 可以用一个好的 IDE 来直接看注释。比如 PhpStorm:
更多PHP new static 和 new self详解相关文章请关注PHP中文网!
上一篇: 两分钟彻底关闭Windows的更新
下一篇: 实现linux和windows文件传输
推荐阅读
-
PHP中new static()与new self()的区别异同分析
-
PHP中new static() 和 new self() 的区别介绍_PHP
-
PHP中new static()与new self()的区别异同分析_PHP
-
php中new self()和new static()两者之间的区别!
-
php面向对象编程self和static的区别
-
Python中__init__和__new__的区别详解
-
PHP的new static和new self的区别与使用
-
PHP中new static()与new self()的区别异同分析
-
详解C#用new和override来实现抽象类的重写区别
-
PHP的new static和new self的区别与使用