如果第一个有效,php if语句不会看第二个参数

时间:2014-01-23 23:22:10

标签: php

我注意到如果第一个参数为true,PHP不会运行'if statement'的第二个或其他参数。

if($this->sessions->remove("registered_id") or $this->sessions->remove("user_id")){
        echo "you have logged out";
}else {
        echo "wth?";
}

这是我如何使用if。这里还有session类的remove函数。

public function remove($key){
        if(isset($_SESSION[$key])){
            unset($_SESSION[$key]);
            return true;
        }
        else
        {
            return false;
        }
    }

我想要做的就是运行这两个参数..我希望我能说出这个问题..

3 个答案:

答案 0 :(得分:4)

您需要执行这两个功能,存储各自的结果,然后测试这些结果。

$resultA = $this->sessions->remove("registered_id");
$resultB = $this->sessions->remove("user_id");

if ($resultA or $resultB)
{
     …

根据设计,第二个语句不会被执行,因为它的结果将无关紧要。

答案 1 :(得分:2)

如果通过其他参数表示第二个条件,则使用AND而不是OR

如果通过其他参数表示else,则改为使用单独的if语句。

修改

如果您尝试执行这两个语句,请使用按位运算符,请查看本手册: http://www.php.net/manual/en/language.operators.bitwise.php

类似的东西:

if(a | b){

}

这将执行a和b,但仍然是'或'比较。

答案 2 :(得分:1)

这个结果是可以预期的。这就是logical operators所做的。

您需要使用&&and来实现您的目标:

if ($this->sessions->remove("registered_id") && $this->sessions->remove("user_id")) {

原因如下:

&&and关键字表示所有评估都必须返回true。所以:

if ($a && $b) {
    // $a and $b must both be true
    // if $a is false, the value of $b is not even checked
}

||or关键字表示评估必须返回true。所以:

if ($a || $b) {
    // Either $a or $b must be true
    // If $a is false, the parser continues to see if $b might still be true
    // If $a is true, $b is not evaluated, as our check is already satisfied
}

所以在你的情况下,如果$this->sessions->remove("registered_id")成功完成了它,那么$this->sessions->remove("user_id")永远不会被调用,因为我们的检查已经满足了第一次调用的结果。