[英]Calling methods of embedded objects
假設我們有一個在構造函數中獲得3個對象的對象:
$SomeObject = new Object($UrlChecker, $UrlModifier, $UrlComposer);
這樣創建一個包裝對象$ Url會更好:
class Url {
public $Modifier;
public $Composer;
public $Checker;
public function __construct(){
$this->Modifier = new UrlModifier();
$this->Composer = new UrlComposer();
$this->Checker = new UrlChecker();
}
}
然后僅傳遞此$ Url對象:
$Url = new Url();
$SomeObject = new Object($Url);
現在,所有對象都將在$ Url對象中創建,我可以在對象$ SomeObject中調用其成員,如下所示:
$Url->modifier->set_parameter($param);
將嵌入式對象設置為公共對象是一種好習慣,還是應該為每個對象創建一種吸氣方法? 還是我應該通過將所有三個對象都傳遞給$ SomeClass來堅持第一個變量?
我以為我可以使用Java的“ System.out”之類的公共方法,其中“ out”是System對象中的公共成員/對象。
如果要在內部使用$ modifier,$ composer和$ checker並為這些變量創建getter和setter方法,請絕對使用私有變量。 它是OOP的概念,稱為封裝。 主要目的是通過防止用戶將組件的內部數據設置為無效或不一致狀態來保護對象的完整性。
我不知道這是怎么回事:
$this->url->modifier->set_parameter($param);
比這更好:
$this->modifier->set_parameter($param);
您需要呼叫者和被呼叫者采取其他步驟,而沒有明顯的好處。 第一種方法似乎表明這些方法以某種方式正在處理相同的基礎數據(以某種方式存儲在$url
)。 但是,事實並非如此(您的目標似乎是組織,但實際上,您應該由哪個對象控制狀態/基礎數據來驅動)。 基本數據將/應該存儲在控制對象中(由$this
表示)。 所以說了...
將嵌入式對象設置為公共對象是一種好習慣,還是應該為每個對象創建一種吸氣方法?
...您應該隱藏對象並在主對象上創建getter / setter方法,因為它需要控制(封裝的基礎)注入的對象(這就是為什么首先注入它們的原因)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.