PHP中的连续if
我现在正在用PHP进行一些验证,并运行条件语句的ALLOCT,例如: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||
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;}”语句正是您需要的,以明确您想要快速退出某个函数,而不是在检查之前存储一个状态,然后返回。只是巧合,你用同样的风格写你的问题,然后使用类似的代码!小心那个词:永远