PHP內存的對象在內存里面是怎么體現的呢?

電腦雜談  發布時間:2021-03-12 07:01:57  來源:網絡整理

在PHP中,對象與整數和浮點類型相同。它們也是一種數據。它們用于存儲不同類型的數據。

在運行時,必須將其加載到內存中以供使用,那么對象如何反映在內存中?

從邏輯上講,內存大致分為4個段:

堆??臻g段,堆空間段,代碼段,初始化靜態段

程序中的不同聲明放置在不同的內存段中

數據段:

它是指已在程序中初始化但不為0的全局變量,例如靜態變量和常量;

代碼段(代碼段/文本段):

指用于存儲程序執行代碼(例如函數和方法)的存儲區;

堆??臻g段:

這里是存儲占據相同空間長度和較小空間的數據類型的地方,例如整數1、10、100、1000、10000、100000等,

存儲器中占用的空間長度相等,全部為64位和4個字節。然后數據長度是可變的

占用大量空間的數據類型的數據在哪個內存段中?這些數據存儲在堆內存中。

如下所示:

php內存模型

可以直接訪問堆棧內存,而堆內存是不能直接訪問的內存。

對于我們的對象,它是一個大型數據類型,并且占用的空間長度是可變的,因此該對象被放置在堆中,

但是將對象名稱放置在堆棧中,以便該對象名稱可以使用該對象。

$ p1是我們實例化的對象的名稱。同樣,$ p2和$ p3也是我們實例化的對象的名稱。

一個類可以實例化多個對象,并且每個對象都是獨立的。上面的代碼等效于一個3個人的實例。

每個人之間沒有聯系,只能表示他們都是人類,每個人都有自己的姓名,性別和年齡屬性,

每個人都有說話和走路的方式,只要成員屬性和成員方法反映在類中,

這些屬性和方法包含在實例化的對象中。

$p1=new Person();

對于這段代碼,$ p1是堆棧存儲器中對象的名稱。 New Person()是堆內存中的實際對象。有關詳細信息,請參見下圖:

php內存模型

從上圖中,我們可以看到$ p1 = new Person();。等號的右側是實對象實例,即堆內存中的實體,

上圖中有3次new Person(),因此將在堆中打開3個空間,并生成3個實例對象。

每個對象在PHP中使用其自己的空間彼此獨立

只要出現一個新關鍵字,就會實例化一個對象,并在堆中打開一個自己的空間。

堆中的每個實例對象都存儲屬性。例如,名稱,性別和年齡存儲在堆中的實例對象中。

每個屬性都有一個地址。 $ p1 = new Person();等號右側的$ p1是參考變量,

通過賦值運算符“ =”,將對象的第一個地址分配給引用變量“ $ p1”

因此,$ p1是存儲對象的第一個地址的變量,$ p1被放置在堆棧存儲器中,$ p1等效于指向堆中對象的指針,

因此,我們可以通過引用變量$ p1操作對象,通常我們也將對象引用稱為對象。


本文來自電腦雜談,轉載請注明本文網址:
http://www.tjhwsrq.com/a/shoujiruanjian/article-363957-1.html

    相關閱讀
    發表評論  請自覺遵守互聯網相關的政策法規,嚴禁發布、暴力、反動的言論

    熱點圖片
    拼命載入中...
    欧洲熟妇牲交_亚洲国产在线2020最新_日本无吗无卡v免费清高清