全网整合营销服务商

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

免费咨询热线: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 异同与使用详解  # 的是  # 都是  # 子类  # 这两个  # 调用者  # 他们的  # 是在  # 好了  # 结果是  # 就不  # 则是  # 这么多  # 给大家  # 如果没有  # 说白了  # 万年  # 也给  # 有什么区别  # 对吧  # 留个 


相关文章: 香港服务器部署网站为何提示未备案?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  如何在IIS中新建站点并配置端口与物理路径?  网站制作新手教程,新手建设一个网站需要注意些什么?  建站之星安全性能如何?防护体系能否抵御黑客入侵?  公众号网站制作网页,微信公众号怎么制作?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  C#如何使用XPathNavigator高效查询XML  建站之星如何修改网站生成路径?  家庭服务器如何搭建个人网站?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  设计网站制作公司有哪些,制作网页教程?  建站主机选购指南与交易推荐:核心配置解析  建站主机服务器选型指南与性能优化方案解析  建站之星后台搭建步骤解析:模板选择与产品管理实操指南  建站之星北京办公室:智能建站系统与小程序生成方案解析  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  如何快速搭建二级域名独立网站?  如何通过FTP空间快速搭建安全高效网站?  如何在企业微信快速生成手机电脑官网?  北京网站制作的公司有哪些,北京白云观官方网站?  如何快速搭建虚拟主机网站?新手必看指南  如何通过.red域名打造高辨识度品牌网站?  在线教育网站制作平台,山西立德教育官网?  大连网站制作公司哪家好一点,大连买房网站哪个好?  手机网站制作与建设方案,手机网站如何建设?  高防服务器租用指南:配置选择与快速部署攻略  如何选择高效便捷的WAP商城建站系统?  如何选择高效响应式自助建站源码系统?  如何用搬瓦工VPS快速搭建个人网站?  建站主机数据库如何配置才能提升网站性能?  如何选择服务器才能高效搭建专属网站?  如何选择可靠的免备案建站服务器?  如何构建满足综合性能需求的优质建站方案?  建站之星备案流程有哪些注意事项?  香港服务器租用费用高吗?如何避免常见误区?  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  Thinkphp 中 distinct 的用法解析  代刷网站制作软件,别人代刷火车票靠谱吗?  建站之星备案是否影响网站上线时间?  香港服务器租用每月最低只需15元?  如何选择最佳自助建站系统?快速指南解析优劣  网站制作价目表怎么做,珍爱网婚介费用多少?  广州顶尖建站服务:企业官网建设与SEO优化一体化方案  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  金*站制作公司有哪些,金华教育集团官网?  个人摄影网站制作流程,摄影爱好者都去什么网站? 

您的项目需求

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