在不同的类之间传递对象?

时间:2014-08-18 10:28:25

标签: php oop data-structures message-passing

我总是在不同的类之间手动传递数据。例如,我有一个类产生的一些数据:

$someData = $Object->someMethod();
$moreData = $Object2->anotherMethod($someData);

但它对我来说很笨拙,导致代码混乱而变得复杂。特别是如果围绕多个类传递了多种不同类型的数据。

所以我没有这样做,而是决定创建一个类DataContainer,它将与进程相关的每个变量分组,然后我将这个对象传递给不同的类。当它通过处理管道时,它将收集越来越多的数据,直到几乎每个字段都被设置为某个值。

所以例如我有一个处理数据的管道,它被4个不同的类修改 - 而不是按值传递数据,我将通过引用传递它:

$myObject = $class1->method1(); // this class returns the DataContainer object
$class2->method2($myObject);
$class3->method3($myObject);
$class4->method4($myObject);

它被认为是更好的选择吗?还是有更好的东西?

1 个答案:

答案 0 :(得分:0)

请记住将代码设为SOLID。 (http://en.wikipedia.org/wiki/SOLID_(object-oriented_design)) 在您的情况下,您可以在class2的构造函数中创建一个引用。

例如:

<?php
class Class1
{
  private $class2;
  public __construct(Class2 $class2)
  {
     $this->class2 = $class2;
  }

  public function CallMethodOfClass2()
  {
     $value = $this->class2->GetMethod();
     $propertyValue = $this->class2->public_property;
  }
}
?>

或者当你的Class2 cant不存在Class1时,在Class1的构造函数中创建一个类似于Class2的新实例:

<?php
    class Class1
    {
      private $class2;
      public __construct()
      {
         $this->class2 = new Class2();
      }

      public function CallMethodOfClass2()
      {
         $value = $this->class2->GetMethod();
         $propertyValue = $this->class2->public_property;
      }
    }
    ?>