php中newself(),在php代码中新建对象用到的new self与new static有什么不同
我们在使用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有什么不同相关推荐
- Xpath在选择器中正确,在代码中返回的是空列表问题
Xpath在选择器中正确,在代码中返回的是空列表问题 一.问题: 在进行爬虫的时候我们会用到xpath解析html文件,但是会有一种情况就是在xpath选择器中可以使用,但是在代码中就无法使用的情况. ...
- redis高并发原理_Java中的42行代码中的URL缩短服务— Java(?!)Spring Boot + Redis...
redis高并发原理 显然,编写URL缩短服务是新的"世界,您好! "在物联网/微服务/时代的世界中. 一切始于在45行Scala中的URL缩短服务-整洁的Scala,以Spray ...
- java spr_Java中的42行代码中的URL缩短器服务(Java(?!)Spring Boot + Redis
java spr 显然,编写URL缩短服务是新的" Hello,world! "在IoT /微服务/时代的世界中. 一切始于在45行Scala中的URL缩短服务 -整洁的Scala ...
- Java中的42行代码中的URL缩短服务— Java(?!)Spring Boot + Redis
显然,编写URL缩短服务是新的" Hello,world! "在IoT /微服务/时代的世界中. 一切始于在45行Scala中的URL缩短服务 -整洁的Scala,以Spray和R ...
- c# mysql代码中写事务_代码中添加事务控制 VS(数据库存储过程+事务) 保证数据的完整性与一致性...
[c#]代码库代码中使用事务前提:务必保证一个功能(或用例)在同一个打开的数据连接上,放到同一个事务里面操作. 首先是在D层添加一个类为了保存当前操作的这一个连接放到一个事务中执行,并事务执行打开同一 ...
- JDK中ThreadDump诊断Java代码中的线程死锁问题
多线程的死锁..死锁不是死了而是线程互相等待... 在项目中可能就是在几十万行的代码中存在一个死锁的问题,如何发现这个问题并且解决这个问题. JavaJDK为我们提供了一个诊断工具叫做ThreadDu ...
- html语言中空行标记,HTML代码中的空格和空行的实例操作
代码中空格和空行的操作方法是怎样的?我们要在代码中标记换行符或者元素标记,才能被浏览器识别为空格或者空行,现在爱站技术频道就随爱站技术频道来看看HTML代码中的空格和空行的实例操作. 例子1:(文本内 ...
- python中cos函数_Python代码中cos()函数有什么功能呢?
摘要: 下文讲述Python代码中cos()函数的简介说明,如下所示: cos()函数功能 用于计算出x 弧度-所对应的的余弦值 cos()函数语法 math.cos(x) ---------参数说明 ...
- 我们编写的python代码在运行过程中_在Rust代码中编写Python是种怎样的体验?
原标题:在Rust代码中编写Python是种怎样的体验? 作者 | Mara Bos,Rust资深工程师 译者 | Arvin,编辑 | 屠敏 来源 | CSDN(ID:CSDNnews) 大约一年前 ...
最新文章
- 三菱触摸屏通讯错误_三菱触摸屏常见问题及故障汇总
- 天翼云从业认证(2.2)云计算的模式、应用和行业生态
- dls的BM算法模板(线性递推问题,解决矩阵快速幂解决不了的问题)
- 高文院士:从“乡村教师”到人工智能掌舵者的40年科研路
- 程式CSCMSV4黑色炫酷DJ音乐门户模板 音乐网源码
- h5故障代码_H5故障与内机有关?
- 用什么的SQL语句来查的一个表中有相同的记录条数
- 史陶比尔Staubli库卡kuka机器人切割加工首先电主轴德国sycotec
- Java 机器学习库Smile实战(一)SVM
- 如何购买一只好的基金
- 计算机显示无法打开打印机添加,win10电脑提示无法打开添加打印机怎么办
- 指纹识别-传感器原理
- 2021-04-15 三级管npn和pnp的区别
- STM32+IAP方案 实现网络升级应用固件
- art-template整理
- java 编辑PDF 文件,或者填充数据
- 【HNS】试着领一下 HandShake 为开源社区发放的 HNS Coin
- mc服务器维护成本,服务器不是随便开?运营成本才值几个钱,MC玩家这种误解从何而来...
- 百行go代码构建p2p聊天室
- 测绘专业c语言程序,C语言测绘程序.doc