這篇文章給大家分享的是PHP中的new self和new static的區(qū)別。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧。
目前創(chuàng)新互聯(lián)已為成百上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、河曲網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
new static() 是在php5.3版本引入的新特性
new static 和 new self() 都是 new 一個(gè)對(duì)象
直接看代碼
class Father { public function getNewFather() { return new self(); } public function getNewCaller() { return new static(); } } $f = new Father(); var_dump(get_class($f->getNewFather())); // Father var_dump(get_class($f->getNewCaller())); // Father
getNewFather和getNewCaller 都是返回的 Father 這個(gè)實(shí)列
到這里貌似 new self() 還是 new static() 是沒(méi)有區(qū)別的
接著看下面的示例
class Sun1 extends Father{ } $sun1 = new Sun1(); var_dump($sun1->getNewFather()); // object(Father)#4 (0) { } var_dump($sun1->getNewCaller()); // object(Sun1)#4 (0) { }
getNewFather 返回的是Father的實(shí)列,
getNewCaller 返回的是調(diào)用者的實(shí)列
他們的區(qū)別只有在繼承中才能體現(xiàn)出來(lái)、如果沒(méi)有任何繼承、那么二者沒(méi)有任何區(qū)別
new self() 返回的實(shí)列是不會(huì)變的,無(wú)論誰(shuí)去調(diào)用,都返回的一個(gè)類(lèi)的實(shí)列,
new static則是由調(diào)用者決定的。
看完上述內(nèi)容,你們對(duì)PHP中的new self和new static的區(qū)別大概了解了嗎?如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!