我应该在构造函数中或在将值作为参数传递之前检查值是否正确?

时间:2016-02-29 22:40:01

标签: php

让我们说我正在编写一个将进行基本CRUD操作的类,所以我希望所有要插入数据库的值都是小写的。 所以,我确保构造函数中的值都是小写的,例如:

class Insert {
  private $name;
  private $lastname;

  public function __construct($name, $lastname) {
    $this->name = strtolower($name);
    $this->name = strtolower($lastname);
  }
}
$obj = new Insert('Jhon', 'Doe');

或者在创建实例之前,像这样:

class Insert {
  private $name;
  private $lastname;

  public function __construct($name, $lastname) {
    $this->name = $name;
    $this->name = $lastname;
  }
}
$obj = new Insert(strtolower('Jhon'), strtolower('Doe'));

1 个答案:

答案 0 :(得分:1)

我会设置一个DTO来格式化值。更具可读性,你的班级不需要知道是否更严格,只设置变量。

DTO课程:

class UserDto
{
    public $lastname;

    public $name;

    function __construct($name, $lastname)
    {
       $this->lastname = strtolower($lastname);
       $this->name = strtolower($name);
    }
}

然后你可以做

$userDto = new UserDto('Jhon', 'Doe');
$obj = new Insert($userDto);
$obj->save();

class Insert
{
    private $name;
    private $lastname;

    public function __construct($userDto)
    {
        $this->name = $userDto->name;
        $this->lastname = $userDto->lastname;
    }
}

现在,如果有时您需要名称和姓氏不再需要strolower,您唯一需要做的就是更改类DTO而不影响Insert类。