3

在以下情况下创建新的对象类型而不是使用数组是否更有意义:

我有一个简单的结构,有两个值:姓名和年龄

$ages = array(
     array(
       'name' => 'bill',
       'age'  => 22
    ),
    array(
       'name' => 'bob',
       'age'  => 50
    ),
    // etc
);

问题是这个结构在一个类中生成并通过一个控制器,然后在另一个类中使用。

因此感觉这两个类是捆绑在一起的,因为必须知道这个结构的数组键是在另一个类中生成的。

有没有解决这个问题的设计模式?

4

4 回答 4

1

我认为您不需要(即使有)一种设计模式来在一个类中生成对象/数据结构,并在另一个类中使用它。这是使用类的基本前提。此外,正如 alfasin 所提到的,使用对象比使用数组更整洁。同样在未来,如果需要,您可以与其他对象进行更好的交互。

于 2012-08-23T22:14:29.590 回答
1

我会一路定义一个 Person 模型类。像这样的东西

Class Person {

  protected _age;

  protected _name;


  public function __construct($name = null, $age = null) {
    if ($name) setName($name);
    if ($age) setAge($age);
  }

  public function getName() {
    return $this->_name;
  }

  public function setName($name) {
    return $this->_name = (string) $name;
  }

  public function getAge() {
    return $this->_age;
  }

  public function setAge($age) {
    return $this->_age = (int) $age;
  }
}

然后,您可以使用此类创建数据结构,如下所示:

$persons = array(new Person('bill', 22),new Person('bob', 50));

然后这个数组可以被你的控制器传递并在视图中像这样使用:

foreach($persons as $person) {
  echo $person->getName();
  echo $person->getAge();
}

这种设计模式被称为 MVC(模型视图控制器)并且非常流行并且有据可查,尽管我的解释不同。

对于您的简单结构来说,这可能看起来有点矫枉过正,但在将来必须扩展代码时,它将为您节省大量时间。

(代码未经测试,但我认为它应该可以正常工作)

于 2012-08-24T00:24:47.927 回答
0

由于它是一个简单的结构,您可以使用它,但通常建议使用对象。如果您将来想添加字段,请添加级别(嵌套数组) - 维护会更容易,因为您的程序将更加模块化且耦合更少:

// I - easier to use
$bill_age = $ages->get_age('bill'); 
// function get_age() is implemented in the class which 
// makes you code easier to maintain and easier to understand

// II - this implementation is dependent on the structure of $ages 
// if you'll change $ages - you'll have to change all the uses:
$bill_arr = $ages[0];
$bill_age = $bill_arr['age'];

此外,如果您将II在代码中的不同位置进行调用,则更改$ages结构将导致更改所有这些位置,而如果您实现I- 您在代码中只有一个位置需要更改(get_age($name)类内部的实现)。

于 2012-08-23T22:10:37.623 回答
0

我认为您可以拥有一个包含此结构的键的类,然后两个类将共享该类以获取键实例。这样,您就不必跟踪两个类中的键。此外,您可以随时在此处添加更多键而无需进行太多更改。更少的耦合和更多的灵活性。

于 2012-08-26T16:39:26.403 回答