PHP将$ _POST数据映射到对象

时间:2013-09-01 06:33:36

标签: php forms oop

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

假设我有一个表格:

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

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

事先谢谢你。

1 个答案:

答案 0 :(得分:5)

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

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

对于更复杂的对象,请使用映射器

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