PHP对象验证

Dan*_*Dan 6 php validation object

我目前正在开发一个OO PHP应用程序.我有一个名为validation的类,我想用它来检查提交的所有数据是否有效,但是我显然需要在某处定义要检查的每个属性的规则.目前,我正在构建一个新对象时使用数组.例如:

$this->name = array(
'maxlength' => 10,
'minlength' => 2,
'required' => true,
'value' => $namefromparameter
)
Run Code Online (Sandbox Code Playgroud)

每个属性一个数组.

然后,我将从验证类调用静态方法,该方法将根据每个数组中定义的值执行各种检查.

有更有效的方法吗?任何建议表示赞赏 谢谢.

sou*_*rge 8

我知道关联数组通常用于配置PHP中的东西(它被称为魔术容器模式,被认为是不好的做法,顺便说一下),但为什么不创建多个验证器类,每个类都能处理一个规则?像这样的东西:

interface IValidator {
    public function validate($value);
}

$validators[] = new StringLengthValidator(2, 10);
$validators[] = new NotNollValidator();
$validators[] = new UsernameDoesNotExistValidator();
Run Code Online (Sandbox Code Playgroud)

与使用数组的实现相比,这有许多优点:

  • 你可以记录它们(非常重要),phpdoc无法解析数组键的注释.
  • 您的代码变得错字安全(array('reqiured' => true))
  • 它完全是OO,并没有引入新的概念
  • 它更具可读性(虽然更冗长)
  • 可以直观地找到每个约束的实现(它不是在400行函数中,而是在适当的类中)

编辑:这里是一个要回答我给的链接到一个不同的问题,但主要适用于这一个为好.