PHP将$_POST数据映射到对象


PHP Map $_POST data to object

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

假设我有一个表格:

<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)。

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

事先谢谢。

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

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

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

class AMapper {
    public function fetch(A $aObject) {}
}