全网整合营销服务商

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

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


相关文章: 香港服务器如何优化才能显著提升网站加载速度?  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  宝塔建站后网页无法访问如何解决?  建站之星如何实现PC+手机+微信网站五合一建站?    如何用IIS7快速搭建并优化网站站点?  如何挑选高效建站主机与优质域名?  制作营销网站公司,淘特是干什么用的?  建站之星备案是否影响网站上线时间?  如何快速搭建高效简练网站?  如何选择最佳自助建站系统?快速指南解析优劣  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  如何选购建站域名与空间?自助平台全解析  如何正确下载安装西数主机建站助手?  小型网站制作HTML,*游戏网站怎么搭建?  ui设计制作网站有哪些,手机UI设计网址吗?  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  小建面朝正北,A点实际方位是否存在偏差?  c# 在高并发场景下,委托和接口调用的性能对比  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  C#怎么使用委托和事件 C# delegate与event编程方法  大型企业网站制作流程,做网站需要注册公司吗?  专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何高效利用亚马逊云主机搭建企业网站?  ,购物网站怎么盈利呢?  如何在建站之星网店版论坛获取技术支持?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  如何在宝塔面板中修改默认建站目录?  如何高效完成自助建站业务培训?  深圳网站制作的公司有哪些,dido官方网站?  专业网站建设制作报价,网页设计制作要考什么证?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  如何在阿里云虚拟服务器快速搭建网站?  如何零基础开发自助建站系统?完整教程解析  php条件判断怎么写_ifelse和switchcase的使用区别【对比】  制作网页的网站有哪些,电脑上怎么做网页?  建站之星如何配置系统实现高效建站?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  电商网站制作价格怎么算,网上拍卖流程以及规则?  视频网站制作教程,怎么样制作优酷网的小视频?  江苏网站制作公司有哪些,江苏书法考级官方网站?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  学校免费自助建站系统:智能生成+拖拽设计+多端适配  高端网站建设与定制开发一站式解决方案 中企动力  东莞专业制作网站的公司,东莞大学生网的网址是什么?  如何在Windows环境下新建FTP站点并设置权限? 

您的项目需求

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