物件導向的 形 與 本

2021-07-16 07:43:13 字數 2514 閱讀 7127

類是物件的抽象組織,物件是類的具體存在。

類是我們對一組物件的描述

在php中,每個類的定義都以關鍵字class開頭,後面跟著類名,緊接著一對花括號,裡面包含有類成員方法的定義。如下**所示:

<?php

class

person

}

定義了乙個person類。代表了抽象出來的人這個概念,它含有姓名和性別這兩個屬性,還具有開口說話的方法。

$student = new person();

$student->name='tom';

$student->gender='male';

$student->say();

$teacher = new person();

$teacher->name='kate';

$teacher->gender='female';

$teacher->say();

這段**示例化了person類,差生了乙個student物件和teacher物件的例項。實際上也就是從抽象到具體的過程。

類定義了一系列的屬性和方法,並提供了實際的操作細節,這些方法可用來對屬性進行加工。物件含有類屬性的具體值,這就是類的例項化。正是由於屬性的不同,才能區分不同的物件。在上面的例子中,由於student和teacher的姓名和性別不同,才得以區分出二人。

物件是由屬性和方法組成的。由於php的物件是用陣列來模擬的,因此我們把物件轉為陣列就能看到這個物件所擁有的屬性了。

print_r((array)$student);

var_dump($student);

執行結果為:

array ( [name] => tom [gender] => male )

object(person)#1 (2)

到這裡可以很直觀的認知到,物件就是一堆資料。既然如此,可以把乙個物件儲存起來,一遍需要時使用。這就是物件的**序列化**。

所謂序列化,就是把儲存在記憶體中的各種物件狀態(屬性)儲存起來,並且在需要時可以還原出來。

這裡我們需要用到兩個函式:`serialize()`和`unserialize()`

`serialize()`函式將例項轉化為乙個序列化的字串

`unserialize()` 還原已經序列化的物件

下面的**實現的是將記憶體中的物件儲存到乙個檔案中。

$str = serialize($student);

echo

$str;

file_put_contents('store.txt', $str);

執行結果為

o:6:」person」:2:

在需要時反序列化這個物件。

$str = file_get_contents('store.txt');

$student = unserialize($str);

$student->say();

此時無需例項化可以繼續使用,而且屬性和值都是保持在序列化之前的狀態

補充:其實serialize()就是將php中的變數如物件(object),陣列(array)等等的值序列化為字串後儲存起來.序列化的字串我們可以儲存在其他地方如資料庫、session、cookie等,序列化的操作並不會丟失這些值的型別和結構。這樣這些變數的資料就可以在php頁面、甚至是不同php程式間傳遞了。

而unserialize()就是把序列化的字串轉換回php的值。

可以看到,物件序列化後,儲存的只是物件的屬性。類是由屬性和方法組成的,而物件則是屬性的集合,有同乙個類生成的不同物件,擁有各自不同的屬性,但共享了類的**空間中方法區域的**。

物件也是一種很普通的變數,不同的是其攜帶了物件的屬性和類的入口。

物件可以裝換為陣列,陣列也能轉換成物件。陣列是由鍵值對資料組成的,陣列的鍵值對和物件的屬性/屬性值十分相似。

$student_arr = array('name'=>'tom', 'gender'=>'male');

echo serialize($student_arr);

執行結果如下:

a:2:

而上文中,物件序列化後的結果為:

o:6:」person」:2:

可以很清楚的看出,物件和陣列在內容上一模一樣!

而物件和陣列的區別在於:物件還有個指標,指向它所屬的類。

類是定義一系列屬性和操作的模板,而物件則把屬性進行具體話,然後交給類處理。物件就是資料,物件本身不包含方法。但是物件有乙個"指標"指向乙個類,這個類裡可以有方法。

方法描述不同屬性所導致的不同表現。

類和物件是不可分隔的,有物件就必定有乙個類和其對應,否則這個物件也就成了乙個沒有親人的孩子(但有一種特殊情況存在,就是由標量進行強制型別轉換的object,沒有乙個類和它對應。此時,php中乙個稱為"孤兒"的stdclass類就會收留這個物件)。

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

物件導向將 物件 作為程式的基本單位,通過對資料和程式的封裝,實現軟體的重用性 靈活性以及可拓展性。類是物件的抽象組織,而物件是類的具體表現。物件導向的形 類是物件的具體描述,下面定義乙個簡單的類person class person 下面對類例項化 student new person stude...

物件導向過程與物件導向

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

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

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