php中newself(),在php代码中新建对象用到的new self与new static有什么不同
我們?cè)谑褂胮hp代碼新建對(duì)象的時(shí)候,一般會(huì)用到new self與new static,那么它們?cè)谑褂玫臅r(shí)候區(qū)別在哪里?
先說(shuō)說(shuō)new static(),new static與new self一樣,在php代碼中,它是用來(lái)新建一個(gè)對(duì)象的.
那么他們之間的不同之處在哪里呢?
new static與new self之間的不同在于在于新創(chuàng)建的是同一個(gè)類的實(shí)例與不同類的實(shí)例.
如下面這段示例:
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());
?>
以上代碼通過(guò)使用php自帶的get_class()方法是來(lái)用于獲取指定實(shí)例所屬類名
運(yùn)行后可以得出,無(wú)論他們調(diào)用的是hqnewself()函數(shù),還是hqnewstatic()函數(shù),其結(jié)果都為newdx
然而當(dāng)我們繼續(xù)創(chuàng)建
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類有兩個(gè)子類,由于newdx類的hqnewself()和hqnewstatic()是公共的,所以在子類中依舊繼承了這兩方法。
其運(yùn)行結(jié)果依次為newdx、newcl1、newdx、newcl2,無(wú)論是子類newcl1,還是子類newcl2,調(diào)用hqnewself()即new self()其返回的對(duì)象都是類newdx,而hqnewstatic()即 new static(),則返回了調(diào)用者子類的實(shí)例名稱.
他們的區(qū)別在類的繼承中才會(huì)顯示出來(lái),當(dāng)它們沒(méi)有任何繼承,那么使用他們沒(méi)有什么區(qū)別。
new self()返回的實(shí)例都是同一個(gè)類的實(shí)例,而new static()則是由調(diào)用的子類決定的.
總結(jié)
以上是生活随笔為你收集整理的php中newself(),在php代码中新建对象用到的new self与new static有什么不同的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python多线程--互斥锁、死锁
- 下一篇: MATLAB显示错误使用untitled