PHP中的条件不能正常工作

时间:2013-04-03 16:05:56

标签: php conditional

我的条件基本上是这样说的:

如果类型为5,并且用户状态未登录或者历史记录计数为0(或者两者都为真 - 用户未登录且历史记录计数为0),请执行某些操作(在这种情况下,请跳过以下循环处理并跳转到下一个迭代器)。

我做错了什么,因为即使我认为不应该这样做,也会打击其他人。

以下是代码:

if($row['type'] === 5 && ($_SESSION['appState']['user_state']['status'] <> STATE_SIGNED_IN ||  $historyRtn[0]['historyCnt'] === 0) ) {
    error_log("don't create");
    continue;
}
else {
    error_log("type: " . $row['type'] . "; appState: " .$_SESSION['appState']['user_state']['status'] . "; historyCount: " . $historyRtn[0]['historyCnt']  );
}

对于$row['type']为5的所有代码块,无论其他值是什么,它都会触及其他代码。以下是来自else的错误日志。 (仅供参考,STATE_SIGNED_IN设置为“已登录”。)

// this one incorrectly hits the else, as appState is not signed in and historyCount is 0
type: 5; appState: recognized unregistered; historyCount: 0  

// this one incorrectly hits the else, as appState is signed in, but historyCount is still 0
type: 5; appState: signed in; historyCount: 0

// this one correctly hits the else, as appState is signed in and historyCount is 1
type: 5; appState: signed in; historyCount: 1

如果所有三个条件都为真,我如何才能对if语句进行短语以便只触及else?我宁愿不改变声明,如果type为5且appState已登录且historyCount&gt; 0因为它需要一个else(我现在只有其他的用于测试)并且它需要将其中运行的所有其余循环代码移动到else中 - 如果我可以评估我不做的条件希望循环在if中运行,我只能使用continue来跳过我不想处理的项目。

2 个答案:

答案 0 :(得分:2)

由于您使用的是===,因此您询问$row[type]是否等于5,并且它们属于同一类型。您需要var_dump $row来查看数据类型。

例如:

$row[type] = "5";
var_dump($row[type]);

返回

string(1) "5"

因此,类型可能没有评估为真。

您可以尝试像这样进行投射:

if( (int)$row[type] === 5 ... )

答案 1 :(得分:1)

代码

if($row['type'] === 5 && ($_SESSION['appState']['user_state']['status'] <> STATE_SIGNED_IN ||  $historyRtn[0]['historyCnt'] === 0) )

您使用===运算符代替==

===将匹配值以及输入

==只会匹配值

所以用户==或检查类型是否相等