2

假设我们有一个在构造函数中获取 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 中的公共成员/对象。

4

2 回答 2

0

如果您打算在内部使用 $modifier、$composer 和 $checker 并为这些变量创建 getter 和 setter 方法,请务必使用私有变量。这是称为封装的OOP概念。主要目的是通过防止用户将组件的内部数据设置为无效或不一致的状态来保护对象的完整性。

于 2013-10-29T01:50:26.733 回答
0

我不明白这是怎么回事:

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

比这更好:

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

您需要为调用者和被调用者执行额外的步骤,而没有明显的好处。第一种方法看起来似乎这些方法以某种方式处理相同的基础数据(以某种方式存储在 中$url)。但是,情况并非如此(您的目标似乎是组织,但实际上您应该由哪个对象控制状态/基础数据来驱动)。基础数据将/应该存储在控制对象(由 表示$this)中。所以,说了这么多……

将嵌入式对象设置为公共是一种好习惯,还是应该为每个对象创建一个 getter 方法?

...您应该隐藏对象并在主对象上创建 getter/setter,因为它需要控制(封装的基础)注入的对象(这就是您首先注入它们的原因)。

于 2013-10-29T15:22:13.497 回答