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

发布时间 - 2026-01-11 02:50:23    点击率:

前言

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


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  如何在阿里云高效完成企业建站全流程?  怎么用AI帮你设计一套个性化的手机App图标?  Firefox Developer Edition开发者版本入口  如何快速搭建高效WAP手机网站?  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  百度浏览器如何管理插件 百度浏览器插件管理方法  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  如何在IIS管理器中快速创建并配置网站?  如何快速搭建支持数据库操作的智能建站平台?  Python并发异常传播_错误处理解析【教程】  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  黑客如何通过漏洞一步步攻陷网站服务器?  如何构建满足综合性能需求的优质建站方案?  Laravel如何与Pusher实现实时通信?(WebSocket示例)  java获取注册ip实例  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  想要更高端的建设网站,这些原则一定要坚持!  如何用PHP快速搭建CMS系统?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  php结合redis实现高并发下的抢购、秒杀功能的实例  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  如何用AI帮你把自己的生活经历写成一个有趣的故事?  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  免费视频制作网站,更新又快又好的免费电影网站?  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  高端建站三要素:定制模板、企业官网与响应式设计优化  如何在服务器上配置二级域名建站?  中山网站推广排名,中山信息港登录入口?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  如何在IIS7中新建站点?详细步骤解析  大同网页,大同瑞慈医院官网?  如何挑选高效建站主机与优质域名?  高端企业智能建站程序:SEO优化与响应式模板定制开发  Laravel如何生成URL和重定向?(路由助手函数)  QQ浏览器网页版登录入口 个人中心在线进入  如何快速生成凡客建站的专业级图册?  中国移动官方网站首页入口 中国移动官网网页登录  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  制作公司内部网站有哪些,内网如何建网站?  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  html5的keygen标签为什么废弃_替代方案说明【解答】  青岛网站建设如何选择本地服务器?  如何用景安虚拟主机手机版绑定域名建站?