2013-10-29 39 views
2

假設我們有一個對象,在獲得3個構造對象的方法然後只傳遞這個$ Url對象:調用嵌入對象

$Url = new Url(); 
$SomeObject = new Object($Url); 

現在所有對象都將在$ Url對象中創建,我可以調用它們的meme目標$ SomeObject這樣的BER內:

$Url->modifier->set_parameter($param); 

它是一個很好的做法,設定嵌入對象爲公共或我應該爲每一個對象吸氣劑的方法?或者,也許我應該堅持第一個變種,將所有三個對象都傳遞給$ SomeClass?

我想我可以使用像Java的「System.out」這樣的公共方法,其中「out」是System對象內的公共成員/對象。

回答

0

我也不怎麼看這個:

$this->url->modifier->set_parameter($param);

是比這更好:

$this->modifier->set_parameter($param);

你需要呼叫者和沒有明顯的好處被叫方的額外步驟。第一種方法使得看起來這些方法在某種程度上適用於相同的基礎數據(以某種方式存儲在$url中)。但是,情況並非如此(您的目標似乎是組織,但實際上您應該由哪個對象控制狀態/基礎數據來驅動)。基礎數據將/應該存儲在控制對象中(由$this表示)。所以,說...

將嵌入式對象設置爲公共或我應該爲每個對象創建一個getter-method?

...您應該隱藏對象並在主對象上創建getter/setters,因爲它需要控制(封裝的基礎)注入對象(這就是爲什麼您首先注入它們的原因)。

0

如果您打算在內部使用$ modifier,$ composer和$ checker併爲這些變量創建getter和setter方法,那麼肯定使用私有變量。這是OOP的概念,稱爲封裝。主要目的是通過防止用戶將組件的內部數據設置爲無效或不一致的狀態來保護對象的完整性。