我现在在 PHP 中进行一些验证,并且正在运行分配条件语句,例如:
if ($this->email->isValid($email))
return false;
if ($this->username->isValid($username))
return false;
等等。。
有没有很好的方法来做到这一点?还是我只运行十个像上面那样的 If 语句?我显然不能使用switch,但我正在寻找那种类型的解决方案..
PS ..我正在使用 Zend Framework 进行验证
我现在在 PHP 中进行一些验证,并且正在运行分配条件语句,例如:
if ($this->email->isValid($email))
return false;
if ($this->username->isValid($username))
return false;
等等。。
有没有很好的方法来做到这一点?还是我只运行十个像上面那样的 If 语句?我显然不能使用switch,但我正在寻找那种类型的解决方案..
PS ..我正在使用 Zend Framework 进行验证
你可以像这样 OR 他们:
if(cond1||
cond2||
cond3||
cond4)
{
return false;
}
做这样的事情被称为监护人条款。它可以改进,因此返回相同值的子句应该组合在一起。
if ($this->email->isValid($email) || $this->username->isValid($username))
{
return false;
}
或者像这样,如果有很多(顺便说一句,我如何格式化 if 只是为了让它更好地阅读,任何其他方式也应该没问题)
if (
$this->email->isValid($email) ||
$this->username->isValid($username) ||
$this->somethingelse()
)
{
return false;
}
做这样的事情:
$errlvl = 0;
if($errlvl == 0 && $this->email->isValid($email)){
$errlvl++;
}
if($errlvl == 0 && $this->username->isValid($username)){
$errlvl++;
}
// your validation list keeps going
if($errlvl > 0){
return false;
}
这将
我会让他们成为我班级的数据成员。显然在这里你必须有一个表单驱动的类。因此,例如,这里可以将电子邮件包装到一个类中,并在将它们作为成员变量的类的构造函数中进行初始化。现在电子邮件包装类将在初始化/构造时对电子邮件进行验证。
恕我直言,这看起来不那么混乱,您可以将任何验证或特定方法包装到电子邮件包装器类中。
我知道在某些情况下它可能是一把大锤。所以明智地选择!
也许是这样的:
foreach( $form->getElements as $element => $value )
{
if( !$element->isValid( sanitize($value))){
return false;
}
}
但是,如果您使用的是 ZF,这是您的 oneliner 答案,因为您在一个而不是单个字段中检查所有表单:
$form = new My_Zend_Form(); // in the controller action that you send the form to
if ( $form->isValid($_POST)) {
// Success /// do whatever you want with the data
$data = $form->getValues();
} else {
//error
}
如果这是来自表单的数据,请查看 Zend_Form,正如您其他问题中的海报所推荐的那样
我发布了一些示例代码,详细说明了向表单元素添加验证器
只需确保将最明显的验证放在顶部,因此如果它失败,它会在运行每个语句之前跳闸。另外,我不喜欢没有大括号的 if 语句,但这只是一个见仁见智的问题。
if ($this->email->isValid($email) ||
$this->username->isValid($username))
return false;
使用一些 var 总比多次返回好
如果这些是唯一的返回条件。我们不需要检查所有条件。像只检查真条件默认返回假,反之亦然。
$结果=假;//默认返回false。
if (cond1 || cond2) { //仅检查导致返回 true 的条件。:)
$result = true;
}
返回$结果;
干杯,
-拉特内什
将所有对象添加到数组并对其进行迭代(我猜你或 Zend 正在使用接口“验证器”或类似的东西,每个组件(用户名、电子邮件等)都实现了“isValid”方法):
$validators = array();
$validators[] = $this->email;
$validators[] = $this->username;
foreach ($validators as $validator)
{
if (!$validator->isValid())
{
return false;
}
}