我们在使用php代码新建对象的时候,一般会用到new self与new static,那么它们在使用的时候区别在哪里?

先说说new static(),new static与new self一样,在php代码中,它是用来新建一个对象的.

那么他们之间的不同之处在哪里呢?

new static与new self之间的不同在于在于新创建的是同一个类的实例与不同类的实例.

如下面这段示例:

class newdx {

public function hqnewself() {

return new self();

}

public function hqnewstatic() {

return new static();

}

}

$newdx = new newdx();

echo get_class($newdx->hqnewself());

echo get_class($newdx->hqnewstatic());

?>

以上代码通过使用php自带的get_class()方法是来用于获取指定实例所属类名

运行后可以得出,无论他们调用的是hqnewself()函数,还是hqnewstatic()函数,其结果都为newdx

然而当我们继续创建

class newcl1 extends newdx {

}

class newcl2 extends newdx {

}

$newcl1 = new newcl1();

$newcl2 = new newcl2();

echo get_class($newcl1->hqnewself());

echo get_class($newcl1->hqnewstatic());

echo get_class($newcl2->hqnewself());

echo get_class($newcl2->hqnewstatic());

以上代码表示newdx类有两个子类,由于newdx类的hqnewself()和hqnewstatic()是公共的,所以在子类中依旧继承了这两方法。

其运行结果依次为newdx、newcl1、newdx、newcl2,无论是子类newcl1,还是子类newcl2,调用hqnewself()即new self()其返回的对象都是类newdx,而hqnewstatic()即 new static(),则返回了调用者子类的实例名称.

他们的区别在类的继承中才会显示出来,当它们没有任何继承,那么使用他们没有什么区别。

new self()返回的实例都是同一个类的实例,而new static()则是由调用的子类决定的.

php中newself(),在php代码中新建对象用到的new self与new static有什么不同相关推荐

  1. Xpath在选择器中正确,在代码中返回的是空列表问题

    Xpath在选择器中正确,在代码中返回的是空列表问题 一.问题: 在进行爬虫的时候我们会用到xpath解析html文件,但是会有一种情况就是在xpath选择器中可以使用,但是在代码中就无法使用的情况. ...

  2. redis高并发原理_Java中的42行代码中的URL缩短服务— Java(?!)Spring Boot + Redis...

    redis高并发原理 显然,编写URL缩短服务是新的"世界,您好! "在物联网/微服务/时代的世界中. 一切始于在45行Scala中的URL缩短服务-整洁的Scala,以Spray ...

  3. java spr_Java中的42行代码中的URL缩短器服务(Java(?!)Spring Boot + Redis

    java spr 显然,编写URL缩短服务是新的" Hello,world! "在IoT /微服务/时代的世界中. 一切始于在45行Scala中的URL缩短服务 -整洁的Scala ...

  4. Java中的42行代码中的URL缩短服务— Java(?!)Spring Boot + Redis

    显然,编写URL缩短服务是新的" Hello,world! "在IoT /微服务/时代的世界中. 一切始于在45行Scala中的URL缩短服务 -整洁的Scala,以Spray和R ...

  5. c# mysql代码中写事务_代码中添加事务控制 VS(数据库存储过程+事务) 保证数据的完整性与一致性...

    [c#]代码库代码中使用事务前提:务必保证一个功能(或用例)在同一个打开的数据连接上,放到同一个事务里面操作. 首先是在D层添加一个类为了保存当前操作的这一个连接放到一个事务中执行,并事务执行打开同一 ...

  6. JDK中ThreadDump诊断Java代码中的线程死锁问题

    多线程的死锁..死锁不是死了而是线程互相等待... 在项目中可能就是在几十万行的代码中存在一个死锁的问题,如何发现这个问题并且解决这个问题. JavaJDK为我们提供了一个诊断工具叫做ThreadDu ...

  7. html语言中空行标记,HTML代码中的空格和空行的实例操作

    代码中空格和空行的操作方法是怎样的?我们要在代码中标记换行符或者元素标记,才能被浏览器识别为空格或者空行,现在爱站技术频道就随爱站技术频道来看看HTML代码中的空格和空行的实例操作. 例子1:(文本内 ...

  8. python中cos函数_Python代码中cos()函数有什么功能呢?

    摘要: 下文讲述Python代码中cos()函数的简介说明,如下所示: cos()函数功能 用于计算出x 弧度-所对应的的余弦值 cos()函数语法 math.cos(x) ---------参数说明 ...

  9. 我们编写的python代码在运行过程中_在Rust代码中编写Python是种怎样的体验?

    原标题:在Rust代码中编写Python是种怎样的体验? 作者 | Mara Bos,Rust资深工程师 译者 | Arvin,编辑 | 屠敏 来源 | CSDN(ID:CSDNnews) 大约一年前 ...

最新文章

  1. 三菱触摸屏通讯错误_三菱触摸屏常见问题及故障汇总
  2. 天翼云从业认证(2.2)云计算的模式、应用和行业生态
  3. dls的BM算法模板(线性递推问题,解决矩阵快速幂解决不了的问题)
  4. 高文院士:从“乡村教师”到人工智能掌舵者的40年科研路
  5. 程式CSCMSV4黑色炫酷DJ音乐门户模板 音乐网源码
  6. h5故障代码_H5故障与内机有关?
  7. 用什么的SQL语句来查的一个表中有相同的记录条数
  8. 史陶比尔Staubli库卡kuka机器人切割加工首先电主轴德国sycotec
  9. Java 机器学习库Smile实战(一)SVM
  10. 如何购买一只好的基金
  11. 计算机显示无法打开打印机添加,win10电脑提示无法打开添加打印机怎么办
  12. 指纹识别-传感器原理
  13. 2021-04-15 三级管npn和pnp的区别
  14. STM32+IAP方案 实现网络升级应用固件
  15. art-template整理
  16. java 编辑PDF 文件,或者填充数据
  17. 【HNS】试着领一下 HandShake 为开源社区发放的 HNS Coin
  18. mc服务器维护成本,服务器不是随便开?运营成本才值几个钱,MC玩家这种误解从何而来...
  19. 百行go代码构建p2p聊天室
  20. 测绘专业c语言程序,C语言测绘程序.doc

热门文章

  1. 为什么35岁的C++依然能主导编程世界
  2. 指尖上的艺术——如何运用代码发挥无限创意
  3. 软件开发者最重要的四大技能
  4. 什么样的项目经历会让面试官眼前一亮
  5. 什么是面试的关键?资深HR告诉你!
  6. CentOS 7 使用iptables防火墙
  7. ThreadLocal的练习代码
  8. 文件读取ini文件另一种读取办法
  9. Hashtable的测试
  10. 关于CString的=操作符