PHP new static 和 new self详解

 2025-01-15  阅读 295  评论 8  点赞 285

摘要:最近在一个视频的评论被问到一个小问题:这里选择用static 而不是self有特殊的考虑么?或者我们可以这样转换一下问题: php 的 new static 和 new self 具体有什么? 其实这个来看一个例子应该就很清晰了: class father { public static function getself() { return new

最近在一个视频的评论被问到一个小问题:这里选择用static 而不是self有特殊的考虑么?或者我们可以这样转换一下问题:

PHP new static 和 new 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:

happy hacking


标签:phpphp教程

评论列表:

  •   weihang666
     发布于 3天前回复该评论
  • 写的很不错,学到了!
  •   weihang233
     发布于 2天前回复该评论
  • 写的很不错,学到了!
显示更多评论

发表评论:

管理员

承接各种程序开发,外贸网站代运营,外贸网站建设等项目
  • 内容2460
  • 积分67666
  • 金币86666

Copyright © 2024 LS'Blog-保定PHP程序员老宋个人博客 Inc. 保留所有权利。 Powered by LS'blog 3.0.3

页面耗时0.0273秒, 内存占用1.93 MB, 访问数据库28次

冀ICP备19034377号