PHP物件導向中的聚合和組合

2021-06-13 07:47:15 字數 1597 閱讀 6977

php物件導向中的聚合和組合

物件之間進行互動主要有三種:繼承,聚合,組合,繼承大家都很熟悉,這裡就不具體介紹了,本文主要介紹聚合和組合的一些內容。

聚合:可以理解成第二個物件通過第乙個物件的某個方法傳遞給第乙個物件,然後第二個物件就可以呼叫第乙個物件的方法,第二個物件可以根據自己的目的使用第二個物件的功能;

組合:用於描述乙個物件完全擁有另乙個物件的情況,即第乙個物件中例項化第二個物件,該方式最常用語,第乙個物件唯一需要使用第二個物件。

該段**演示聚合和組合

work.class.php(該檔案同樣被組合的例子使用)

<?php 

class work

//獲取屬性資訊的函式

public function getinfo() }

?>

life.class.php

<?php

//引入work類檔案

require_once("work.class.php");

//定義life 類檔案

class life

//採用物件聚合的方式,將物件作為乙個引數賦值給成員屬性

public function addworktolife(work $work)

//顯示所有的工作資訊

public function displayworks()

//返回結果值

return $workinfo;

} //採用物件組合的方式,將物件直接例項化在方法內部

function showworklife() }

//例項化乙個life物件

$life=new life("andy");

組合echo $life->showworklife();

//聚合

//例項化兩個work物件

$work1=new work('past',15);

$work2=new work("now",30);

//呼叫life物件的addworktolife方法,新增work物件

$life->addworktolife($work1);

$life->addworktolife($work2);

echo $life->displayworks();

?>

聚合與組合的比較:

1.何時使用聚合還是組合,通過回答「如果物件a消亡後,物件b還會存在嗎?」,如果物件b在物件a消亡後繼續存在,物件a應聚合物件b。但是當物件b和a一同消亡時,物件a應該組合物件b。當然還可以從物件b是否唯一被物件a所需要的情況。

2.聚合比組合管理負擔小,因為在聚合中乙個物件可以被其他多個物件共享。將資料庫連線類進行聚合確實很不錯。而組合資料庫連線類會因為流量高而變慢。

3.組合使得類更容易使用。

4.聚合的問題,共享已聚合物件的某個物件可能會改變已聚合物件的狀態,導致該物件無法在被希望使用它的其他類使用

5.組合會造成兩個物件之間出現高度耦合,導致依賴性很高,這違背模組設計中的「高內聚,低耦合」的原則,使得重用更加困難。

總結:因此大家在使用聚合或者組合時需要根據自己的情況,綜合以上幾點選擇使用那種方式處理兩個物件之間的互動。

DDD中的聚合和UML中的聚合以及組合的關係

uml 聚合關係 成員物件是整體的一部分,但是成員物件可以脫離整體物件獨立存在。如汽車 car 與引擎 engine 輪胎 wheel 車燈 light 之間的關係為聚合關係,引擎 輪胎 車燈可以脫離車而存在,比如把乙個引擎換到另乙個汽車上也可以。組合關係 也表示的是一種整體和部分的關係,但是在組合...

php物件導向分頁,PHP中物件導向的分頁類

page new page 53,10 p page rendor echo var dump p echo 分頁類 class page protected url url protected pagecount 總頁數 protected total 總條數 protected num 每頁顯示...

物件導向 物件的組合

組合 乙個類的例項可以當做引數傳給另乙個類的例項 class school def init self,name,address self.name name self.address address class course def init self,name,price,outline,sch...