日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

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

發布時間:2023/12/20 php 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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有什么不同的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。