2

这更像是一个最佳实践问题。

假设我有一个表格:

<form action="self.php" method="POST">
    <input type="text" name="aA" />
    <input type="text" name="aB" />
    <input type="text" name="aC" />
</form>

以及 PHP 中的相应类:

class A
{
    public function getA(){
        return $this->a;
    }

    public function setA($a){
        $this->a = $a;
    }

    public function getB(){
        return $this->b;
    }

    public function setB($b){
        $this->b = $b;
    }

    public function getC(){
        return $this->c;
    }

    public function setC($c){
        $this->c = $c;
    }

    private $a;
    private $b;
    private $c;
}

不知何故,我设法从表单中发送数据。现在,我需要将表单数据转换为 A 的实例。

我目前正在做的事情如下:

abstract class AStrategy {
    public function doMapping(){
        $a = new A();
        if (isset($_POST['aA']) === true) {
            $a->setA($_POST['aA']);
        }
        ... (same for b and c)
        return $a; //A completely mapped object
    }
}

而且我非常清楚这是非常糟糕的做法(违反 DRY)。

  • 这样做的最佳做法是什么?
  • 如果我有一个复杂的对象树怎么办?如果我需要同时映射相关对象怎么办?
  • 谁应该做映射?谁应该创建对象等?

事先谢谢你。

4

1 回答 1

5

对于简单对象,使用构造函数

public function __construct($a, $b, $c) {
    $this->a = $a;
    $this->b = $b;
    $this->c = $c;
}

对于更复杂的对象,请使用Mapper

class AMapper {
    public function fetch(A $aObject) {}
}
于 2013-09-01T06:39:28.210 回答