假设我们有一个对象在构造函数中获取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);
将嵌入对象设置为公共或者我应该为每个对象创建一个getter方法是一个好习惯吗?或者我可以通过将所有三个对象传递给$ SomeClass来坚持第一个变体?
我认为我可以使用Java的“System.out”这样的公共方法,其中“out”是System-object中的公共成员/对象。
答案 0 :(得分:0)
如果你打算在内部使用$ modifier,$ composer和$ checker,那么肯定使用私有变量,并为这些变量创建getter和setter方法。它是OOP概念,称为封装。主要目的是通过阻止用户将组件的内部数据设置为无效或不一致的状态来保护对象的完整性。
答案 1 :(得分:0)
我不明白这是怎么回事:
$this->url->modifier->set_parameter($param);
比这更好:
$this->modifier->set_parameter($param);
您需要为来电者和被叫方提供额外的步骤而没有明显的好处。第一种方法使得看起来这些方法以某种方式使用相同的基础数据(以某种方式存储在$url
中)。但是,情况并非如此(您的目标似乎是组织,但实际上您应该由哪个对象控制状态/基础数据来驱动)。基础数据将/应存储在控制对象中(由$this
表示)。所以,说了......
将嵌入对象设置为公共或我应该是一个好习惯 为每个对象创建一个getter-method?
...你应该隐藏对象并在主对象上创建getter / setter,因为它需要控制(封装的基础)注入的对象(这就是你首先注入它们的原因)。