我的代码如下所示:
$muted = 'true'; //Note this is only for testing
if ($muted == 'false' || $muted == '' || $do_not_text == '' || $do_not_text =='false'){
//do this first thing
}
else{
//do something else
}
我无法让else
运行。我弄乱了什么语法?
与此相关,我在我的数据库中存储了一个值(这将是在我的实际代码中设置为$muted
的那个),它是'true','false'或''。我应该将这些数据类型存储为什么?目前,我正在使用VARCHAR
,但我怀疑这是问题的一部分。
答案 0 :(得分:5)
$do_not_text == ''
评估为true。为什么?因为$do_not_text
未定义,这是一个假值。您将它与空字符串进行比较,该字符串也等同于虚假值。因此比较成立,导致第一个if语句被评估为true。
答案 1 :(得分:2)
我不确定你为什么要使用字符串作为布尔值。
$muted = true; // no need for quotes
在比较布尔值时,您还可以考虑使用===
运算符。
if ($muted === false || // etc...
我应该将这些数据类型存储为什么?
MySQL中的布尔值通常存储为1或0。
field_name TINYINT(1) UNSIGNED NOT NULL DEFAULT 0
答案 2 :(得分:2)
将它们存储为TINYINT
,其长度为1
,因为它只有1和0,0
是默认值。
然后,您可以根据需要制作$muted = boolval($db_muted_val);
,或按原样使用$db_muted_val
,因为1
为true
且0
为false
if ($db_muted_val) {
// do this first thing
} else {
// do something else
}