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

本文详细探讨了PHP中newself和newstatic在新建对象时的区别。newself总是返回同一类的实例,而newstatic则根据调用它的对象返回相应类的实例。在没有继承的情况下,两者行为相同,但在类继承中,newstatic会根据子类调用返回子类实例,newself始终返回父类实例。
摘要由CSDN通过智能技术生成

我们在使用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()则是由调用的子类决定的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值