PHP物件導向(PHP物件在記憶體中的分配)

2022-02-25 10:59:31 字數 1419 閱讀 8992

對 像在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 這個引用變數來操作物件,通常我們也 稱物件引用為物件。

PHP物件導向

1 什麼是物件導向 起初,物件導向 是專指在程式設計中採用封裝 繼承 抽象等設計方法。可是,這個定義顯然不能再適合現在情況。物件導向的思想已經涉及到軟體開發的各個方面。如 物件導向的分析 ooa,object oriented analysis 物件導向的設計 ood,object oriented...

php物件導向

smarty自定義函式 作用 用於在模板被執行時為模板變數賦值 函式名稱 assign 引數 var 宣告變數名稱 字串 value 給該變數賦值 字串 tpl assign title this is title 實現自定義函式有兩種 1.註冊自定義函式 3.版本不支援 tpl register ...

php物件導向

一 寫出php的public protected private三種訪問控制模式的區別 public 公有,任何地方都可以訪問 protected 繼承,只能在本類或子類中訪問,在其他地方不允許訪問 private 私有,只能在本類中訪問,在其他地方不允許訪問 二 請用單態設計模式方法設計類滿足要求...