PHP中new self()和new static()的区别用法

  • 更新时间:2020-05-28 16:16:15
  • 编辑:傅琴轩

本文介绍了PHP中new self()和new static()的区别,分享给大家,也给自己留个笔记。

1.new static()是在PHP5.3版本中引入的新特性。

2.无论是new static()还是new self(),都是new了一个新的对象。

3.这两个方法new出来的对象有什么区别呢,说白了就是new出来的到底是同一个类实例还是不同的类实例呢?

为了探究上面的问题,我们先上一段简单的代码:

class Father {

 public function getNewFather() {
  return new self();
 }

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

}

$f = new Father();

print get_class($f->getNewFather());
print get_class($f->getNewCaller());

注意,上面的代码get_class()方法是用于获取实例所属的类名。

这里的结果是:无论调用getNewFather()还是调用getNewCaller()返回的都是Father这个类的实例。

打印的结果为:FatherFather

到这里,貌似new self()和new static()是没有区别的。我们接着往下走:

class Sun1 extends Father {

}

class Sun2 extends Father {

}

$sun1 = new Sun1();
$sun2 = new Sun2();

print get_class($sun1->getNewFather());
print get_class($sun1->getNewCaller());
print get_class($sun2->getNewFather());
print get_class($sun2->getNewCaller());

看上面的代码,现在这个Father类有两个子类,由于Father类的getNewFather()和getNewCaller()是public的,所以子类继承了这两个方法。

打印的结果是:FatherSun1FatherSun2

我们发现,无论是Sun1还是Sun2,调用getNewFather()返回的对象都是类Father的实例,而getNewCaller()则返回的是调用者的实例。

即$sun1返回的是Sun1这个类的实例,$sun2返回的是Sun2这个类的实例。

现在好像有点明白new self()和new static()的区别了。

首先,他们的区别只有在继承中才能体现出来,如果没有任何继承,那么这两者是没有区别的。

然后,new self()返回的实例是万年不变的,无论谁去调用,都返回同一个类的实例,而new static()则是由调用者决定的。

上面的$sun1->getNewCaller()的调用者是$sun1对吧!$sun1是类Sun1的实例,所以返回的是Sun1这个类的实例,$sun2同样的道理就不赘述了。 

好了,关于PHP中new self()和new static()的区别就暂时说这么多,希望对读者的理解有所帮助,如果有不对的地方欢迎拍砖扔蛋。也希望大家多多支持码农之家。

相关教程

  • php连接MySQL的两种方式区别

    这篇文章主要介绍了php连接MySQL的两种方式对比,一种是原生的链接方式另外一种是PDO方式,附上示例,推荐给大家,有需要的小伙伴可以参考下

    发布时间:2020-03-20

  • PHP中加速、缓存扩展的区别及用法整理

    这篇文章主要介绍了PHP中eAccelerator、memcached、xcache、APC 4个加速、缓存扩展的区别的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下

    发布时间:2020-02-09

  • PHP7引入的"??"和"?:"的区别详解

    今天小编就为大家分享一篇关于PHP7引入的??和?:的区别讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    发布时间:2019-07-02

  • PHP基础教程(第4版)

    PHP基础教程(第4版)

    大小:10251 MB MPHP教程

  • PHP从入门到精通(第4版)

    PHP从入门到精通(第4版)

    《php从入门到精通(第4版)》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用PHP进行网络开发应该掌握的各方面技术。《php从入门到精通(第4版)》共分4篇25章,

    大小:38.6 MBPHP入门电子书

  • PHP7内核剖析

    PHP7内核剖析

    《PHP7内核剖析》基于PHP7,深刻揭示内核原理,内容翔实,详细介绍PHP语言底层的实现,助力开发者进一步理解PHP,参与到PHP的实现中。

    大小:5.6 MBPHP7电子书

  • 编程红宝书:PHP完全自学手册

    编程红宝书:PHP完全自学手册

    本书从基础知识入手,配合图形、代码,使读者从浅入深,逐步掌握PHP知识。对PHP的语法进行了详细的介绍,对于常用的PHP函数,也进行了实例代码演示,具有很强的实用价值,欢迎下载

    大小:71.1 MBPHP手册电子书

  • PHP+MySQL动态网站开发从入门到精通

    PHP+MySQL动态网站开发从入门到精通

    《PHP+MySQL动态网站开发从入门到精通》本书循序渐进地介绍了PHP 7 MySQL 5.7开发动态网站的主要知识和技能,提供案例、课件、命令速查手册,让你看得懂、学得会、做得出,教你快速成为网站应用开发高手。

    大小:36.2 MB网站开发电子书

  • JavaScript for PHP Developers

    JavaScript for PHP Developers

    大小:27.4 MBJavaScript电子书

  • PHP经典实例(第3版)

    PHP经典实例(第3版)

    PHP经典实例(第3版)介绍了专门为PHP 5.4和5.5修订的350个经典技巧,并提供了丰富的示例代码。可以免费使用,另外还讨论了如何解决问题以及这些解决方案为什么可行,希望会对大家有帮助

    大小:55.9 MBPHP实例电子书

  • PHP项目开发全程实录(第4版)

    PHP项目开发全程实录(第4版)

    大小:70471 MB MPHP开发

  • PHP基础教程

    PHP基础教程

    本书以通俗易懂的语言向初学者介绍了PHP语言的基本概念、使用方法和注意事项。全书通过丰富的示例,引领读者逐步掌握这门流行的Web开发语言,使读者能够上手编写适用于常用场景的PHP脚

    大小:25.3 MBPHP教程

  • PHP5权威编程

    PHP5权威编程

    《PHP5权威编程》一书为大家全面介绍了PHP 5中的新功能、面向对象编程方法及设计模式,还分析阐述了PHP 5中新的数据库连接处理、错误处理和XML处理等机制。希望能够帮助读者系统了解、熟练掌握PHP,大程度地挖掘PHP的潜力,以更低的成本搭建更加稳健、高效的PHP应用。

    大小:25.3 MBPHP5电子书

用户留言