我的条件基本上是这样说的:
如果类型为 5,并且用户状态未登录或历史计数为 0(或两者均为真 - 用户未登录且历史计数为 0),则执行某些操作(在这种情况下,跳过以下循环处理并跳转到下一个迭代器)。
我做错了什么,因为它击中了 else,即使我认为它不应该这样做。
这是代码:
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。这是来自 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 ?我宁愿不更改声明是否类型为 5 并且 appState 已登录且 historyCount > 0 因为它需要一个 else (我现在只有 else 用于测试)并且它需要移动所有其余的在 else 中运行的循环代码 - 如果我可以评估我不希望循环在 if 中运行的条件,我可以只使用continue
跳过我不想处理的项目。