我們上面說過物件導向程式的單位就是對象,但對象又是通過類的執行個體化出來的,既然我們類會聲明了,下一步就是執行個體化對象了。
當定義好類後,我們使用new關鍵字來產生一個對象。
$對象名稱 = new 類名稱();
$p1=new Person();
這條代碼就是通過類產生執行個體對象的過程,$p1就是我們執行個體出來的對象名稱, 同理,$p2, $p3也是我們執行個體出來的對象名稱,一個類可以執行個體出多個對象,每個對象都是獨立的,上面的代碼相當於執行個體出來3個人來, 每個人之間是沒有聯絡的, 只能說明他們都是人類, 每個人都有自己的姓名, 性別和年齡的屬性,每個人都有說話和走路的方法,只要是類裡面體現出來的成員屬性和成員方法,執行個體化出來的對象裡面就包含了這些屬性和方法。
對像在PHP裡面和整型、浮點型一樣,也是一種資料類,都是儲存不同類型資料用的,在啟動並執行時候都要載入到記憶體中去用, 那麼對象在記憶體裡面是怎麼體現的呢?記憶體從羅輯上說大體上是分為4段, 棧空間段, 堆空間段,程式碼片段, 初使化靜態段, 程式裡面不同的聲明放在不同的記憶體段裡面,棧空間段是儲存佔用相同空間長度並且佔用空間小的資料類型的地方,比如說整型1, 10, 100, 1000, 10000, 100000等等,在記憶體裡面佔用空間是等長的,都是64位4個位元組。 那麼資料長度不定長,而且佔有空間很大的資料類型的資料放在那記憶體的那個段裡面呢?這樣的資料是放在堆記憶體裡面的。棧記憶體是可以直接存取的,而堆記憶體是不 可以直接存取的記憶體。對於我們的對象來說就是一種大的資料類型而且是佔用空間不定長的類型,所以說對象是放在堆裡面的,但對象名稱是放在棧裡面的,這樣通 過對象名稱就可以使用對象了。
$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這個引用變數來操作對象, 通常我們也稱對象引用為對象。
以上就介紹了PHP物件導向(OOP)編程完全教程:5.如何執行個體化對象?,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。