PHP中的连续if

PHP中的连续if,php,oop,switch-statement,if-statement,Php,Oop,Switch Statement,If Statement,我现在正在用PHP进行一些验证,并运行条件语句的ALLOCT,例如: if ($this->email->isValid($email)) return false; if ($this->username->isValid($username)) return false; 等等 有什么好办法吗?或者我只是运行10个类似于上面的If语句? 我显然不能使用switch,但我正在寻找那种类型的解决方案 另外,我正在使用Zend Framework进行验证您可以这样做: if(cond1||

我现在正在用PHP进行一些验证,并运行条件语句的ALLOCT,例如:


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

等等

有什么好办法吗?或者我只是运行10个类似于上面的If语句? 我显然不能使用switch,但我正在寻找那种类型的解决方案


另外,我正在使用Zend Framework进行验证

您可以这样做:

if(cond1||
   cond2||
   cond3||
   cond4)
{
  return false;
}
foreach( $form->getElements as $element => $value )
{ 
    if( !$element->isValid( sanitize($value))){
       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;
}

如果这是来自表单的数据,请查看Zend_表单,这是您的网站上的海报所推荐的


我发布了一些关于向表单元素添加验证器的详细信息

请确保将最明显的验证放在顶部,这样,如果它将失败,它将在运行每个语句之前跳闸。另外,我不喜欢没有花括号的if语句,但那只是一个意见问题。

使用一些var而不是多重回报总是好的

if ($this->email->isValid($email) || 
    $this->username->isValid($username))
        return false;
在这种情况下,这些是唯一的返回条件。我们不需要检查所有情况。like check only for true条件默认返回false,反之亦然

$result=false//默认情况下返回false

如果cond1 | | cond2{//只检查导致返回true的条件:

  $result = true;
}

返回$result

干杯


-Ratnesh可能是这样的:

if(cond1||
   cond2||
   cond3||
   cond4)
{
  return false;
}
foreach( $form->getElements as $element => $value )
{ 
    if( !$element->isValid( sanitize($value))){
       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;
}
但如果您使用的是ZF,这是您的一行回答,因为您在一个字段中检查所有表单,而不是单个字段:

$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
}

这样做被称为监护人条款。可以对其进行改进,以便将返回相同值的子句分组在一起

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

我会让他们成为我们班的一员。显然,这里必须有一个表单驱动的类。例如,在这里,电子邮件可以包装到一个类中,并在类的构造函数中初始化,该类将电子邮件作为成员变量。现在,电子邮件包装器类将在初始化/构造时对电子邮件进行验证

这样看起来就不那么杂乱了,您可以将任何验证或特定方法打包到电子邮件包装器类中


我知道在某些情况下,这可能是一把大锤;所以明智地选择吧

这样做:

if(cond1||
   cond2||
   cond3||
   cond4)
{
  return false;
}
foreach( $form->getElements as $element => $value )
{ 
    if( !$element->isValid( sanitize($value))){
       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;
}
这将

减少冗余,因为如果前面有错误,将不会检查以下内容。 你可以继续添加到列表中 如果您想知道发生了多少错误,可以在语句中删除$errlvl==0
将所有对象添加到一个数组中,然后对其进行迭代我猜您或Zend正在使用一个接口验证器或类似的东西,每个组件用户名、电子邮件等实现isValid方法:

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

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

我必须知道哪里出了问题。。所以这不会起作用,Daniel,用你当前的代码,你也不会知道出了什么问题。你能举一个更好的例子吗?不应该这样$此->电子邮件->是有效的,即是/不是/有效的?对于其他人来说,这只是一个要点,以后可能会出现此问题/答案-有时几个“if{return;}”语句正是您需要的,以明确您想要快速退出某个函数,而不是在检查之前存储一个状态,然后返回。只是巧合,你用同样的风格写你的问题,然后使用类似的代码!小心那个词:永远