方法将多次返回FALSE

时间:2013-08-24 15:55:40

标签: php return-value

正如标题所说,我的一种方法中有很多条件语句。在我的两个条件中,我被困在我的两个return FALSE上。

我正在使用MVC所以在我的控制器中我检查方法是否返回TRUE:

if ($this -> m_homepage -> reset_pw($step = 1, $value)) { // If all is true in method redirect
    $this -> session -> set_flashdata('message', 'A Message Was Sent');
    redirect('c_homepage/index', 'location');
} elseif ($this -> m_homepage -> reset_pw($step = 1, $value) == 'badcap') { // If captcha fails return bad_recaptcha
    var_dump("bad_recaptcha");
} else { // if any other FALSE happens (only one more left) then that means account is locked
    var_dump("account is locked");
}

在我的方法中:

if (!$cap -> is_valid) {// If reCaptcha not valid
    return 'badcap';
} else {// If reCaptcha is valid
    if ($lockedaccount == '1') {// If account is locked (1)
        return FALSE; // No email should be sent period.
    } else {
        if ($no_employee) {// email does not exist then 

            ................ // Set up email body and what not

            if ($email_sent() { // If email is sent
                $this -> session -> unset_userdata('email');
                return TRUE;
            }
        }
    }
}

所以在我的方法中注意我有一个FALSE语句和返回字符串的语句。如何在我的控制器中区分哪一个被退回?

我想做这样的事情:

if ($this -> m_homepage -> reset_pw($step = 1, $value) == 'badcap') {
    // This will allow me to execute code is the recaptcha (badcap) is returned
}

我的逻辑是不正确的?任何帮助都会很棒。

  

编辑1

var_dump($this -> m_homepage -> reset_pw($step = 1, $value)); 

给了我badcap

3 个答案:

答案 0 :(得分:1)

我真的不明白你的问题是什么。你想知道是否使用

if ($my_return == 'badcap')
{ 
// CODE
}

是否正确?

如果是这样,那么是的,这是一个可行的方法。

为了使您的代码更清晰,您还可以使用常量来命名您的返回值,但它并不真正适用于您的情况,因为您只有3个可能的返回值。在创建具有50种不同可能返回值的函数时,您会考虑它。


你的代码中的主要问题是你打电话给你的功能两次,这对你的表现不利。

您应首先指定变量并在IF中使用

$return_val = $this -> m_homepage -> reset_pw($step = 1, $value);
if ($return_val == TRUE) ...
if ($return_val == 'badcap')

此外,当您应用返回值并且确定它将是哪种类型时,使用===可以提高性能。

答案 1 :(得分:0)

知道任何非空字符串或任何非零整数总是被视为真如果被视为布尔值。所以,错误在于第一行:

if ($this -> m_homepage -> reset_pw($step = 1, $value))

即使你的函数返回值'badcap',这也会计算为true,如果else条件被忽略,则会实现这个条件。相反,使用

if ($this -> m_homepage -> reset_pw($step = 1, $value) == TRUE)

答案 2 :(得分:0)

再传递一个变量以及false或true。

    if (!$cap -> is_valid) {
         return array('badcap','False'); 
       } else {
        if ($lockedaccount == '1') {
           return array('lockedaccount','False'); 
        } else {
        if ($no_employee) {// email does not exist then 

            if ($email_sent() { // If email is sent
                $this -> session -> unset_userdata('email');
                return array('mailsent','True'); 
            }
         }
      }
    }