Php 嵌入式对象的调用方法

Php 嵌入式对象的调用方法,php,oop,object,Php,Oop,Object,假设我们有一个在构造函数中获取3个对象的对象: $SomeObject = new Object($UrlChecker, $UrlModifier, $UrlComposer); 创建这样的包装器对象$Url不是更好吗: class Url { public $Modifier; public $Composer; public $Checker; public function __construct(){ $this->Modifier = n

假设我们有一个在构造函数中获取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->modifier->set_parameter($param);
然后仅传递此$Url对象:

$Url = new Url();
$SomeObject = new Object($Url);
现在所有对象都将在$Url对象中创建,我可以在$SomeObject对象中调用它们的成员,如下所示:

class Url {

 public $Modifier;
 public $Composer;
 public $Checker;

     public function __construct(){
         $this->Modifier = new UrlModifier();
         $this->Composer = new UrlComposer();
         $this->Checker = new UrlChecker();
     }
}
$Url->modifier->set_parameter($param);
将嵌入式对象设置为公共对象是一种好做法,还是应该为每个对象创建一个getter方法?或者我应该继续使用第一个变体,将所有三个对象传递给$SomeClass


我想我可以使用Java的“System.out”这样的公共方法,其中“out”是系统对象中的公共成员/对象。

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

我不知道这是如何实现的:

$this->url->modifier->set_参数($param)

比这更好:

$this->modifier->set_参数($param)

您需要为呼叫者和被呼叫者执行其他步骤,但没有明确的好处。第一种方法使这些方法似乎是以某种方式使用相同的基础数据(以某种方式存储在
$url
中)。然而,情况并非如此(您的目标似乎是组织,但实际上您应该由哪个对象控制状态/基础数据来驱动)。基本数据将/应该存储在控制对象中(由
$this
表示)。所以,尽管如此

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

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