我注意到如果第一个参数为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;
}
}
我想要做的就是运行这两个参数..我希望我能说出这个问题..
答案 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")
永远不会被调用,因为我们的检查已经满足了第一次调用的结果。