物件導向的「形」與「本」

2021-07-27 06:22:12 字數 1799 閱讀 8165

物件導向將「物件」作為程式的基本單位,通過對資料和程式的封裝,實現軟體的重用性、靈活性以及可拓展性。

類是物件的抽象組織,而物件是類的具體表現。

物件導向的形:

類是物件的具體描述,下面定義乙個簡單的類person

class person

}//下面對類例項化

$student = new person();

$student->name = "tom";

$student->gender = "male";

$student->say();

這個類代表了人這個抽象的概念,這個類有姓名和性別這兩個屬性,還有說話這個方法。但是這個類僅僅是對人這個概念的抽象描述,它本身是沒有實際意義的,只有具體的例項化才會有意義,這就是我們說的物件。乙個類的設計需要能充分展示其重要的方法和屬性,並且能與其他的事物區分。

(1)類定義了一系列方法和屬性

(2)物件含有類屬性的具體值,屬性的不同用來區分不同的物件。

php 的物件使用陣列和模擬實現的,當我們將物件轉化為陣列,就能看到這個物件所擁有的屬性了。對上面的student物件,我們將其列印。

print_r((array)$student);

var_dump($student);

對於列印結果,我們發現它其實就是一推資料,和陣列內容的呈現在格式上是一樣的。在php中,我們可以通過序列化(把儲存在記憶體中的物件狀態儲存起來,在需要的時候還原,序列化和反序列化都需要包含類的物件的定義,否則在反序列的過程中可能返回不正確的結果)。

$str = serialize($student);

echo $str;

輸出序列化的結果後我們發現,儲存的只有物件的屬性。由此得出,類是方法和屬性的集合,而物件是屬性的集合,不同的物件有不同的屬性值,但是他們共享了類空間的方法區域。

物件的「本」

php原始碼中變數的定義

#zend/zend.h

typedef union_zvalue_value str;

hashtable *ht; /*hash table value*/

zend_object_value obj;

} zvalue_value;

zvalue就是php底層的變數型別,zend_object_value obj是變數中的乙個結構。在php5中,物件是採用「屬性陣列和方法陣列」來實現的。儲存結構如圖:

物件的zend(php引擎)中的定義與變數的定義原理相同,不同的是攜帶了物件的屬性和類的入口。

在上面的討論中,我們發現其實陣列和物件序列化後在內容上其實是一模一樣的,它們的區別在於:物件還有乙個指標,指向了它所屬的類。在物件序列化後,我們可以看到類名,它就標識了這個物件屬於這個類。這個型別保證了物件在執行類的方法時,可以找到方法所在**空間。

*類是定義一系列屬性和操作的模板,物件是將類具體化,然後交給類處理;

*物件就是資料,本身不包括方法,但是有乙個指標指向乙個類,類裡面可以有方法。

*類和物件是不可分割的,有物件就必定有乙個類與他對應(在php中有乙個特殊情況存在,就是由標量進行強制型別轉化的object,stdclass類可以與他對應)

物件導向的 形 與 本

類是物件的抽象組織,物件是類的具體存在。類是我們對一組物件的描述 在php中,每個類的定義都以關鍵字class開頭,後面跟著類名,緊接著一對花括號,裡面包含有類成員方法的定義。如下 所示 class person 定義了乙個person類。代表了抽象出來的人這個概念,它含有姓名和性別這兩個屬性,還具...

物件導向過程與物件導向

物件導向過程與物件導向 1 程式的發展經歷了兩個階段 面向過程 物件導向。2 對於物件導向與面向過程可以用乙個例子解釋,如乙個木匠要做乙個盒子,那麼這個盒子的出發點會有兩種方式 物件導向 先想好要做的盒子,之後在去找相應的工具去做。面向過程 不去想要做什麼樣的盒子,隨需取工具。物件導向三大特徵 封裝...

物件導向方法與物件導向測試

物件導向 object oriented,oo 方法認為,客觀世界是由各種物件組成的,任何事物都是物件,每乙個物件都有自己的運動規律和內部狀態,都屬於某個物件類,是該物件類的乙個元素。複雜的物件可由相對簡單的各種物件以某種方式而構成,不同物件的組合及相互作用就構成了系統。oo方法是當前的主流開發方法...