简单的条件语句——不像预期的那样工作——在最后使用die()


Simple conditionals - not working as intended - works with die() at the end?

我简直不敢相信我盯着下面的代码看了这么久:

public function send($boxMemUsed, $boxMemAllocate) {
    $this->timeSent = gmmktime();
    if ($boxMemUsed >= $boxMemAllocate)
        header("Location: ".HOME_PAGE.PM_PAGE."?view=inbox&status=Memory full - please delete old messages");
    $validation = $this->_validateMessage();
    if ($validation == 'Invalid User')
        header("Location: ".HOME_PAGE.PM_PAGE."?view=compose&status=Errors&error=".$validation);

---->>如果我在这里添加die(),它会重定向到上面的头,就像if语句正常工作一样

    else
        $sender = $this->_database->sendPMessage(get_object_vars($this));
    if ($sender)
        header("Location: ".HOME_PAGE.PM_PAGE."?view=sentbox&status=Message Sent!");
    else
        header("Location: ".HOME_PAGE.PM_PAGE."?view=compose&status=Errors&error=Send Error");
    }

如果我在结束函数前加上die,它会在If ($sender)条件中捕获。

我正在编写的一个私人消息程序中的简单函数。好的,那么,我进入活动页面,没有错误,我输入了一个不正确的用户名,它应该被$this->_validateMessage()调用捕获-是的,我直接在die()'d之后var_dump结果。然后我检查了if条件句是否正确地捕获了它,它是-它重定向了我…??但是,然后我删除测试var_dumps和die在if结束时,它不会被相同的if条件捕获(如果我们谈论的是if ($validation == 'Invalid User')一个)-它会被else ($sender)条件捕获。所以我决定只是在验证条件结束时添加die(),瞧,它重定向到if行内的标题,就像它应该的那样(显示我列出的get错误)。所以我尝试将骰子添加到函数的末尾-不,它不会被条件语句捕获。我完全被难住了。有人看到我没看到的吗?我甚至绝望地添加了花括号,尽管我知道在单行条件语句中不需要它们——仍然不行。谢谢你的帮助。

当您调用header('Location: ...')时,即使在客户端遵循重定向之后,页面上的其余代码仍继续在服务器上执行。如果这种行为不可取(通常不可取),则在每次调用header('Location: ...')之后对exit;进行调用。我怀疑这样做将使您的脚本按照您的期望运行。

我总是在使用重定向头或出口后放置die();;Asaph推荐的方法也可以。还要确保添加花括号,并为任何空格添加%20或使用urlencode($sting)

if ($boxMemUsed >= $boxMemAllocate) {
    header("Location: ".HOME_PAGE.PM_PAGE."?view=inbox&status=".urlencode("Memory full - please delete old messages"));
    die();
}

我喜欢使用die的一个原因是我可以打印错误信息用于调试:

die('There was an error on line number: '.__LINE__);