全网整合营销服务商

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

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

PHP面向对象中new self()与 new static()的区别浅析

前言

本文主要跟大家介绍了关于PHP面向对象中new self()与 new static()的区别,这两个方法new出来的对象有什么区别呢,说白了就是new出来的到底是同一个类实例还是不同的类实例呢?下面话不多说了,来一起看看详细的介绍吧。

区别如下:

首先阐明结论,在PHP中 self指向定义了当前被调用方法的类, static指向调用当前静态方法的类。

接下来通过一个例子来证明上面的结果

class A 
{
 public static $_a = 'Class A';

 public static function echoProperty()
 {
 echo self::$_a . PHP_EOL;
 }
}

class B extends A 
{
 public static $_a = 'Class B';
}

$obj = new B();
B::echoProperty();//输出 Class A

之所以会这样是因为使用self:: 或者__CLASS__对当前类的静态引用,取决于定义被调用方法所在的类,将上面Class A的方法echoProperty做一下修改变成:

class A 
{
 public static $_a = 'Class A';

 public static function echoProperty()
 {
 echo static::$_a . PHP_EOL;
 }
}
//再次调用B::echoProperty将输出 'CLASS B'

为了避免上面第一个例子中看到的子类重写父类的静态属性后,使用继承来的方法仍然访问父类的静态属性, PHP5.3增加了一个新的语法:后期静态绑定(Late static binding), 使用static关键字替代self关键字,使得static指向与get_called_class()返回的相同的类,即当前调用静态方法的类, 该关键字对于静态方法的访问同样有效。

下面的例子更好的说明了new self()和new static()之间的差异(后者使用了PHP的后期静态绑定指向调用方法的当前类)

class A 
{
 public static function get_self() 
 {
 return new self();
 }

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

class B extends A {}

echo get_class(B::get_self()); // A
echo get_class(B::get_static()); // B
echo get_class(A::get_self()); // A
echo get_class(A::get_static()); // A

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# 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 异同与使用详解  # 绑定  # 后期  # 是因为  # 第一个  # 子类  # 的说  # 说了  # 不多  # 这两个  # 重写  # 这篇文章  # 谢谢大家  # 说白了  # 为了避免  # 有什么区别  # 面向对象  # 增加了  # 使用了  # 有疑问 


相关文章: 建站之家VIP精选网站模板与SEO优化教程整合指南  如何安全更换建站之星模板并保留数据?  C++如何编写函数模板?(泛型编程入门)  购物网站制作公司有哪些,哪个购物网站比较好?  建站之星导航配置指南:自助建站与SEO优化全解析  怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?  如何通过WDCP绑定主域名及创建子域名站点?  商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?  山东云建站价格为何差异显著?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  如何通过可视化优化提升建站效果?  如何高效配置IIS服务器搭建网站?  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  已有域名建站全流程解析:网站搭建步骤与建站工具选择  名字制作网站免费,所有小说网站的名字?  安云自助建站系统如何快速提升SEO排名?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  宁波自助建站系统如何快速打造专业企业网站?  如何通过云梦建站系统实现SEO快速优化?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  如何在云主机快速搭建网站站点?  模具网站制作流程,如何找模具客户?  Python lxml的etree和ElementTree有什么区别  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  济南网站建设制作公司,室内设计网站一般都有哪些功能?  建站与域名管理如何高效结合?  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  家具网站制作软件,家具厂怎么跑业务?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  Bpmn 2.0的XML文件怎么画流程图  如何通过wdcp面板快速创建网站?  智能起名网站制作软件有哪些,制作logo的软件?  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  制作表格网站有哪些,线上表格怎么弄?  如何快速上传建站程序避免常见错误?  三星网站视频制作教程下载,三星w23网页如何全屏?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  建站VPS推荐:2025年高性能服务器配置指南  微信小程序 五星评分(包括半颗星评分)实例代码  常州企业建站如何选择最佳模板?  建站主机默认首页配置指南:核心功能与访问路径优化  如何在腾讯云服务器上快速搭建个人网站?  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  制作门户网站的参考文献在哪,小说网站怎么建立?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  建站之星如何实现PC+手机+微信网站五合一建站? 

您的项目需求

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