通過類實例化對象

面向對象程序的單位就是對象,但對象又是通過類的實例化出來的。所以同一個類的對象可以接受相同的請求,例如,所有的汽車都可以通過方向盤控制方向。如果你僅會聲明一個類,這還不夠,因為在程序中並不是直接在使用類,而是使用通過類創建的對象。所以在使用對象之前先要通過聲明的類實例化出一個或多個對象為我們所用。

方法/步驟

面向對象程序的單位就是對象,但對象又是通過類的實例化出來的。所以同一個類的對象可以接受相同的請求,例如,所有的汽車都可以通過方向盤控制方向。如果你僅會聲明一個類,這還不夠,因為在程序中並不是直接在使用類,而是使用通過類創建的對象。所以在使用對象之前先要通過聲明的類實例化出一個或多個對象為我們所用。

實例化對象

將類實例化成對象非常容易,只使用new關鍵字並在後面加上一個和類名同名的方法。當然如果在實例化對象時不需要為對象傳遞參數,在new關鍵字後面直接用類名稱即可,就不需要再加上括號。對象的實例化格式如下:

$變量名 = new 類名稱([參數數列表]);   //對象實例化格式

$變量名 = new 類名稱   //對象實例化格式,不需要為對象傳參數

其中,」$變量名」是通過類所創建的一個對象的引用名稱,將來通過這個引用來訪問對象中的成員。New表明要創建一個新的對象,類名表示新對象的類型,而參數指定了類的構造方法用於初始化對象的值。如果累中沒有定義構造函數,PHP會自動創建一個不帶參數的默認構造函數

//聲明一個phone類

Class Phone{

//類中成員

}

//聲明一個人類person

Class Person{

//類中成員

}

//通過person類實例化三個對象$person1、$person2、$person3

$person1= new Person();    //創建第一個person類對象,引用名為$person1

$person2 = new Person();     //創建第二個person類對象,引用名為$person2

$person3 = new Person();     //創建第三個person類對象,引用名為$person3

//通過phone類實例化三個對象$phone1、$phone2、$phone3

$phone1 = new Phone();    //創建第一個phone類對象,引用名為$phone1

$phone2 = new Phone();    //創建第一個phone類對象,引用名為$phone2

$phone3 = new Phone();    //創建第一個phone類對象,引用名為$phone3

一個類可以實例化出多個對象,每個對象都是獨立的。在上面的代碼中國國Person類實例化出三個對象$person1、$person2、$person3,相當於在內存中開闢了三分空間用於存放每個對象。使用同一個類聲明的多個對象之間是沒有聯繫的,職能說明他們都是同一個類型,每個對象內部都由類中聲明的成員屬性和成員方法,就像獨立的三個人,都有自己的姓名、性別、和年齡的屬性,每個人都由說話、吃放和走路的方法。在上例中,使用同樣的方法通過」Phone」類也實例化出三個對象,對象的引用分別為$phone1、$phone2、$phone3也是在內存中使用三個獨立的空間分別存儲,就像三部電話之間的關係

對象類型在內存中的分配

對象類型和整形、字符串等類型一樣,也是PHP中的一種數據類型。都是在程序中用於存儲不同類型數據使用的,在程序運行時它的每部分內容都要先加載到內存中再被使用。那麼對象類型的數據在內存中是如何分配的呢?先來了解一下內存結構。邏輯上內存打鐵上分為四段,分別為棧空間段、堆空間段、初始化數據段和代碼段,程序中不同類型數據的聲明將會被存放在不同的內存段裡面。每段內存的特點如下:

1、  棧空間段

棧的特點是空間小但被CPU訪問的速度快,是用戶存放程序中臨時創建的變量。由於棧的後進先出特點,所以棧特別方便用於保存和恢復調用現場。從這個意義上講,我們可以把堆棧看成一個臨時數據寄存,交換的內存區。用於存儲占用空間長度不變並且占用空間小的數據類型的內存段,例如整型1、100、10000等在內存中占用空間是等長的,占用的空間都是32位4個字節。還有double、boolean等都可以存儲在棧空間段中。

1堆空間段

堆是用於存放進程運行中被動態分配的內存段,它大小並不固定,可動態空帳或縮減。用於存儲數據長度可變或占用內存比較大的數據。例如,字符串、數組和對象存儲在這段內存中。

3數據段

數據段用來存放可執行文件中已初始化全局變量,換句話說就是存放程序靜態分配的變量。

4代碼段

代碼段是用來存放可執行文件的操作指令,也就是說它是可執行程序在內存中的鏡像。代碼段需要放置在運行時被非法修改,所以只准許讀取操作,而不允許寫入(修改)操作。例如,程序中的函數就存儲在這段內存中。

對象類型的數據就是一種占用空間比較大的數據類型,並且是占用的空間不定長的數據類型,所以對象創建完成以後被存放在堆內存中,但對象的引用名稱是存放在棧裡面的。程序在運行時,棧內存中的數據是可以直接存取的,而堆內存是不可以直接存取的內存,但可以通過對象的引用名稱訪問對象中的成員。如上例通過Person類實例化的三個對象使用圖形抽象出來,用來了解對象類型的數據是如何在內存中存儲的,進一步了解對象類型的數據。

在PHP中,只要使用一次new關鍵字就會實例化出來一個對象,並在堆裡面開闢一塊自己的空間。上例中執行了三次」new Person()」,則創建了三個Person類的實例對象,堆裡面開闢三個獨立空間。每個對象之間都是相互獨立的,使用自己的空間,而且在每個空間都存有Person類中聲明的成員。

在內存中,存儲數據的每個空間都有一個獨立的內存地址,內存的地址通常是使用十六進位數表示,對象中的每個成員在堆內存中存儲時都會由一個地址,第一個對象的首地址為」0xff001」,如果在程序中知道內存的首地址,就會按順序找到對象中的每個成員。而在」$person1=new Person()」語句中,通過賦值運算符」=」把第一個對象在堆內存中的首地址」0xff001」賦給了變量$person1,所以等號左邊的$person1就是第一個對象的引用變量.變量$person1存放的是一個十六進位整數會被存放在棧內存中。$person1是一個存儲地址的變量,相當於一個指針指向堆裡面的對象。所以訪問第一個對象中的每個成員毒藥通過這個引用變量$person1來完成,通常也可以把對象引用當成對象來看待。同樣,第二個對象的首地址」0xff002」賦給棧裡面的引用變量」$person2」,通過這個引用變量訪問第二個對象中的每個成員。

相關文章

  1. 如何在ES6中調用屬性方法判斷類實例化對象存在

    在我們使用ES6方法創建類,然後在類中定義方法,實例化對象之後調用hasOwnProperty,判斷構造函數中是否存在某個屬性.下面利用實例說明hasOwnProperty的用法,操作如下: 工具/原 ...
  2. 高招消滅老公五類曖昧對象

    "曖昧"始終是心頭的一根刺,總在不經意間隱隱作痛.精神出軌太可惡,老公或男友身邊的曖昧女同事不得不防!小編教你5招,無論面對哪樣的女人,你都能輕輕鬆鬆消滅他身邊的曖昧女. 方法/步 ...
  3. php中怎麼判斷某個類或對象繼承於哪個父類

    如果需要判斷某個類或對象繼承於哪個父類,可用get_parent_class與is_subclass_of實現. 工具/原料 PHP 方法/步驟 定義一個類Cls150520及其子類Cls150520 ...
  4. JS類,對象,實例,屬性,方法,事件區別

    JS類,對象,實例,屬性,方法,事件的區別 工具/原料 javascript 方法/步驟 類指的是某些具有相同特性的事物的統稱.比如全世界所有的人,(全世界所有的人)是一個類. 對象指的是抽象的結構. ...
  5. java基礎學習之二(類和對象):[2]

    java中的類和對象,對一些初學者有時候很混淆 工具/原料 java 類和對象 方法/步驟 我們就用車和寶馬車舉例什麼叫做類,什麼叫做對象,比如下面有很多車,豐田車,寶馬車,奧迪車, 大眾車,等等. ...
  6. 類與對象的基本概念

    Java的特點是是面向對象的一門語言,主要圍繞"類"和"對象",圍繞繼承.多態.封裝的特性展開,所以有關類和對象的知識點很多.很細,同時也很重要,另外本文部分內 ...
  7. 在java中什麼是類和對象

    在大家還沒有學習java類和對象的時候,基本上都是解決的一些比較簡單的小程序,僅僅也就是幾十行代碼而已,如果你要開發的是一個很大的程序,需要用到幾萬行甚至是幾十萬行代碼的量呢,如果把這麼多的代碼都放在 ...
  8. 類與對象實例

    編寫會員類:編寫測試類: 接收控制台用戶輸入會員號.會員姓名.積分,創建一個會員對象, 驗證會員號是否合法,不合法提示退出,合法保存會員數據, 同時顯示當前用戶的折扣信息,最後進行抽獎,提示是否是幸運 ...
  9. JavaScript數據類型、類與對象

    一.理解JS數據類型,類與對象的關係 1.JS數據類型分兩種:一種是基本類型,另一種是引用類型 基本類型有string,number,boolean,null,undefined等.另一種是引用類型, ...
  10. Java核心[2]:類和對象的使用

    面向對象有兩個核心概念,即類(class)和對象(object).類是對某一類事物的抽象化.對對象則是某一具體的事物,也即類的實例化.對象又稱為實例(instance).下面,我們來學習一下類和對象是 ...
  11. 類和對象操作相關系統函數

    類和對象操作相關系統函數 方法/步驟 Class_exist  檢查類是否已定義 Get_class_methods返回由類的方法名組成的數組 Get_class_vars  返回由類的默認屬性組成的 ...
  12. java基礎入門 面向對象 類和對象 封裝

    java 是一門面向對象的程式語言,java語言中三大特性之一的封裝,是將成員變量進行是私有化,在提供2個公共的方法進行方法,可以在方法中加入邏輯操作. 封裝好處:將成員變量變化隔離:提高重用性:提高 ...
  13. PHP有關類和對象的其他相關技術

    PHP有關類和對象的其他相關技術 工具/原料 PHP有關類和對象的其他相關技術 類的自動加載 什麼叫做類的自動加載? 當在我們的代碼的某行語句中,需要一個類,而該類的定義還沒有在這之前的代碼中出現的時 ...
  14. 大學生計算機 c++編程例題 類與對象的創建

    實驗內容 定義一個滿足如下要求的Date類. 1.用下面的格式輸出日期: 日/月/年 2. 可運行在當前日上加一天操作 3. 設置日期. 代碼如下: #include <iostream.h&g ...
  15. 安卓程序開發:[4]java的類與對象基礎

    Java程式語言在目前市面上流行的語言當中,屬於語法最簡單的一種,但其中包含的面相對象思想博大精深,讓人頭痛.從android程序開發基礎的java學習開始,關於類和面向對象的博大思想,並能如何領悟和 ...
  16. Java自習室(類與對象)

    因某種原因,公司想把以前用Java做的一個web項目,用php重寫,而這個任務又落到我頭上,本來想大體看看網上的教程,但是很多java教程都很冗餘,讓初學者看著就頭大,於是乎自己買了本書把看了一遍,順 ...
  17. Java static關鍵字修飾類和對象的方法方法

    從事多年C#和Java開發,使用這兩種語言開發的項目中都不可避免的使用了大量的static關鍵字.該關鍵字的使用也是程式設計師面試中的必考題,所以對該知識點的了解是十分有必要的,在此將所學做分享,希望大家 ...
  18. Kotlin學習-類 實例化 繼承 複寫

    上篇文章我們講解了怎麼創建類和類的構造函數,現在我們來講下怎麼來使用類及類的相關使用 方法/步驟 其實上篇文章我們在看構造的執行順序的時候,以及做了類的實例化,類的實例化很簡單,直接類名(),我們就可 ...
  19. 如何利用PHP設計語言創建類、對象和屬性

    面向對象跟面向對象不一致,主要用類.對象和屬性等一系列的概念來表達.可以創建一個類,在類里聲明成員屬性和成員方法.下面利用一個具體實例來說明,具體操作如下: 工具/原料 PHP eclipse 截圖工 ...
  20. Processing 3入門:類和對象實例

    介紹Processing 3中的面向對象編程.Processing 3基於java,因此面向對象和java是一樣的. 工具/原料 Processing 3 方法/步驟 使用class關鍵字以聲明一個類 ...