對像在PHP 裡面和整型、浮點型一樣,也是一種資料類,都是儲存不同類型資料用的, 在啟動並執行時候都要載入到記憶體中去用,那麼對象在記憶體裡面是怎麼體現的呢?記憶體從邏輯上 說大體上是分為4 段,棧空間段、堆空間段、程式碼片段、初始化靜態段,程式裡面不同的聲明 放在不同的記憶體段裡面,資料區段(data segment)通常是指用來存放程式中已初始化且不為0的全域變數如:靜態變數和常量;程式碼片段(code segment / text segment)通常是指用來存放程式執行代碼的一塊記憶體地區,比如函數和方法;棧空間段是儲存佔用相同空間長度並且佔用空間小的資料類型的地方,比如說整型1,10,100,1000,10000,100000 等等,在記憶體裡面佔用空間是等長的,都是64 位元4 個位元組。那麼資料長度不定長,而且佔有空間很大的資料類型的資料放在那記憶體 的那個段裡面呢?這樣的資料是放在堆記憶體裡面的。如:
棧記憶體是可以直接存取的,而堆記憶體是 不可以直接存取的記憶體。對於我們的對象來數就是一種大的資料類型而且是佔用空間不定長的類型,所以說對象是放在堆裡面的,但對象名稱是放在棧裡面的,這樣通過對象名稱就可 以使用對象了。$p1 就是我們執行個體出來的對象名稱,同理,$p2,$p3 也是我們執行個體出來的對象名稱,一個類可以執行個體出多個對象,每個對象都是獨立的,上面的代碼相當於執行個體出來3 個人來,每個人之間是沒有聯絡的,只能說明他們都是人類,每 個人都有自己的姓名,性別和年齡的屬性,每個人都有說話和走路的方法,只要是類裡面體 現出來的成員屬性和成員方法,執行個體化出來的對象裡面就包含了這些屬性和方法。
$p1=new Person();
對於這個條代碼,$p1 是對象名稱在棧記憶體裡面new Person()是真正的對象是在堆記憶體 裡面的,具體的請看:
從可以看出$p1=new Person();等號右邊是真正的對象執行個體,在堆記憶體裡面的實體, 一共有3 次new Person(),所以會在堆裡面開闢3 個空間,產生3 個執行個體對象,每個對象之間都是相互獨立的,使用自己的空間,在PHP 裡面,只要有一個new 這個關鍵字出現就會 執行個體化出來一個對象,在堆裡面開闢一塊自己的空間。 每個在堆裡面的執行個體對象是儲存屬性的,比如說,現在堆裡面的執行個體對象裡面都存有姓 名、性別和年齡。每個屬性又都有一個地址。 $p1=new Person();等號的右邊$p1 是一個引用變數,通過賦值運算子“=”把對象的首地址 賦給“$p1”這個引用變數,所以$p1 是儲存物件首地址的變數,$p1 放在棧記憶體裡邊,$p1 相當 於一個指標指向堆裡面的對象,所以我們可以通過$p1 這個引用變數來操作對象,通常我們也 稱對象引用為對象。