全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

浅谈PHP中new self()和new static()的区别

本文介绍了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  # static  # self  # static和self  # new  # PHP的new static和new self的区别与使用  # PHP面向对象程序设计中的self、static、parent关键字用法分析  # php面向对象程序设计中self与static的区别分析  # PHP面向对象中new self()与 new static()的区别浅析  # PHP Class self 与 static 异同与使用详解  # 的是  # 都是  # 子类  # 这两个  # 调用者  # 他们的  # 是在  # 好了  # 结果是  # 就不  # 则是  # 这么多  # 给大家  # 如果没有  # 说白了  # 万年  # 也给  # 有什么区别  # 对吧  # 留个 


相关文章: 广州顶尖建站服务:企业官网建设与SEO优化一体化方案  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  建站之星安全性能如何?防护体系能否抵御黑客入侵?  PHP正则匹配日期和时间(时间戳转换)的实例代码  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  建站主机CVM配置优化、SEO策略与性能提升指南  如何通过商城免费建站系统源码自定义网站主题?  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  如何在建站之星网店版论坛获取技术支持?  如何访问已购建站主机并解决登录问题?  如何快速选择适合个人网站的云服务器配置?  如何通过西部数码建站助手快速创建专业网站?  公众号网站制作网页,微信公众号怎么制作?  香港网站服务器数量如何影响SEO优化效果?  建站中国官网:模板定制+SEO优化+建站流程一站式指南  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  代刷网站制作软件,别人代刷火车票靠谱吗?  西安大型网站制作公司,西安招聘网站最好的是哪个?  如何在阿里云域名上完成建站全流程?  如何用IIS7快速搭建并优化网站站点?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  如何通过多用户协作模板快速搭建高效企业网站?  如何选择CMS系统实现快速建站与SEO优化?  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  制作网页的网站有哪些,电脑上怎么做网页?  C++中引用和指针有什么区别?(代码说明)  如何用PHP快速搭建高效网站?分步指南  如何在服务器上配置二级域名建站?  如何在建站主机中优化服务器配置?  如何快速生成凡客建站的专业级图册?  ppt制作免费网站有哪些,ppt模板免费下载网站?  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  大连网站设计制作招聘信息,大连投诉网站有哪些?  如何在宝塔面板中修改默认建站目录?  实例解析Array和String方法  如何在阿里云虚拟主机上快速搭建个人网站?  如何实现建站之星域名转发设置?  北京专业网站制作设计师招聘,北京白云观官方网站?  广东专业制作网站有哪些,广东省能源集团有限公司官网?  黑客入侵网站服务器的常见手法有哪些?  如何设计高效校园网站?  深圳企业网站制作设计,在深圳如何网上全流程注册公司?  成都网站制作报价公司,成都工业用气开户费用?  如何做网站制作流程,*游戏网站怎么搭建?  如何快速搭建响应式可视化网站?  如何在Golang中处理模块冲突_解决依赖版本不兼容问题  如何通过IIS搭建网站并配置访问权限?  建站上传速度慢?如何优化加速网站加载效率?  建站之星安装步骤有哪些常见问题?  如何在万网ECS上快速搭建专属网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。