全网整合营销服务商

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

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


相关文章: 建站之星安装后如何自定义网站颜色与字体?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?  制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?  如何在万网主机上快速搭建网站?  无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?  北京网站制作公司哪家好一点,北京租房网站有哪些?  香港服务器部署网站为何提示未备案?  如何选择CMS系统实现快速建站与SEO优化?  建站主机空间推荐 高性价比配置与快速部署方案解析  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  实惠建站价格推荐:2025年高性价比自助建站套餐解析  济南网站制作的价格,历城一职专官方网站?  香港服务器建站指南:免备案优势与SEO优化技巧全解析  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  ,sp开头的版面叫什么?  整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?  如何正确选择百度移动适配建站域名?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  c# Task.ConfigureAwait(true) 在什么场景下是必须的  网站制作多少钱一个,建一个论坛网站大约需要多少钱?  ,交易猫的商品怎么发布到网站上去?  如何选择靠谱的建站公司加盟品牌?    可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  湖州网站制作公司有哪些,浙江中蓝新能源公司官网?  建站之星后台管理:高效配置与模板优化提升用户体验  网站制作软件有哪些,制图软件有哪些?  建站之星3.0如何解决常见操作问题?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  重庆市网站制作公司,重庆招聘网站哪个好?  网站制作培训多少钱一个月,网站优化seo培训课程有哪些?  如何用IIS7快速搭建并优化网站站点?  Java解压缩zip - 解压缩多个文件或文件夹实例  如何基于PHP生成高效IDC网络公司建站源码?  如何在景安云服务器上绑定域名并配置虚拟主机?  制作网站怎么制作,*游戏网站怎么搭建?  Thinkphp 中 distinct 的用法解析  佛山企业网站制作公司有哪些,沟通100网上服务官网?  网站制作企业,网站的banner和导航栏是指什么?  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  外贸公司网站制作,外贸网站建设一般有哪些步骤?  制作旅游网站html,怎样注册旅游网站?  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  建站之星24小时客服电话如何获取?  高端云建站费用究竟需要多少预算?  公司网站制作价格怎么算,公司办个官网需要多少钱?  广东专业制作网站有哪些,广东省能源集团有限公司官网?  C++时间戳转换成日期时间的步骤和示例代码  高防服务器如何保障网站安全无虞? 

您的项目需求

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