我现在正在PHP中进行一些验证,并且我正在运行所有条件语句,例如:
if ($this->email->isValid($email))
return false;
if ($this->username->isValid($username))
return false;
等..
有一个很好的方法吗?或者我只是运行十个如上所述的If语句?
我显然不能使用switch
,但我正在寻找那种解决方案..
P.S ...我正在使用Zend Framework进行验证
答案 0 :(得分:4)
你可以这样或他们:
if(cond1||
cond2||
cond3||
cond4)
{
return false;
}
答案 1 :(得分:3)
做这样的事情称为Guardian子句。它可以被改进,因此返回相同值的子句应该组合在一起。
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;
}
答案 2 :(得分:0)
如果这是表单中的数据,请按照other question
中的海报的建议,查看Zend_Form我发布了一些example code,详细说明了为表单元素添加验证器
答案 3 :(得分:0)
请确保将最明显的验证置于顶部,因此如果它失败,它将在每个语句运行之前跳闸。此外,我不喜欢if语句没有大括号,但那只是意见问题。
答案 4 :(得分:0)
if ($this->email->isValid($email) ||
$this->username->isValid($username))
return false;
答案 5 :(得分:0)
使用一些var而不是多次返回总是好的
如果这些是唯一的返回条件。我们不需要检查所有条件。比如检查真实条件默认情况下返回false,反之亦然。
$ result = false; //默认返回false。
if(cond1 || cond2){//仅检查导致返回true的条件。 :)
$result = true;
}
返回$ result;
干杯,
-Ratnesh
答案 6 :(得分:0)
也许是这样的:
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
}
答案 7 :(得分:0)
我会让他们成为我班级的数据成员。显然,你必须有一个表格驱动的课程。因此,例如,电子邮件可以包装到一个类中,并在类的构造函数中初始化,并将它们作为成员变量。现在,电子邮件包装器类将对初始化/构建时的电子邮件进行验证。
恕我直言,看起来不那么杂乱,你可以将任何验证或特定方法包装到电子邮件包装类。
我知道在某些情况下它可能是一把大锤;所以明智地选择!
答案 8 :(得分:0)
做这样的事情:
$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;
}
这将
答案 9 :(得分:0)
将所有对象添加到数组并迭代它(我猜你或Zend正在使用接口“验证器”或类似的东西,每个组件(用户名,电子邮件等)实现“isValid”方法):
$validators = array();
$validators[] = $this->email;
$validators[] = $this->username;
foreach ($validators as $validator)
{
if (!$validator->isValid())
{
return false;
}
}