在PHP中连续if

时间:2009-06-16 09:14:31

标签: php oop switch-statement if-statement

我现在正在PHP中进行一些验证,并且我正在运行所有条件语句,例如:


if ($this->email->isValid($email))
return false;
if ($this->username->isValid($username))
return false;

等..

有一个很好的方法吗?或者我只是运行十个如上所述的If语句? 我显然不能使用switch,但我正在寻找那种解决方案..

P.S ...我正在使用Zend Framework进行验证

10 个答案:

答案 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;
}

这将

  1. 减少冗余,因为如果前面有错误,则不会检查以下内容。
  2. 您可以继续添加到列表
  3. 如果您想知道发生了多少错误,可以在语句中删除$ errlvl == 0

答案 9 :(得分:0)

将所有对象添加到数组并迭代它(我猜你或Zend正在使用接口“验证器”或类似的东西,每个组件(用户名,电子邮件等)实现“isValid”方法):

$validators = array();
$validators[] = $this->email;
$validators[] = $this->username;

foreach ($validators as $validator)
{
    if (!$validator->isValid())
    {
        return false;
    }
}