为什么false语句在PHP中只打印0而不是0?

时间:2017-12-03 02:54:16

标签: php

这是一个简单的例子:

echo 3==3; // echoes 1

echo 3==2; // should echo 0, yet echoes nothing

我注意到这一点,因为我正在设计一个需要复选框的表单。勾选时,复选框在未选中时传递值1,而不是按照预期传递值0,它不会传递任何值;一个未定义的布尔值可以这么说。

我尝试使用以下代码解决此问题:

$myBool = isset($_POST['myCheckbox']);

但是,这似乎也不起作用。

将复选框值传递给$myBool的一个解决方案是做一些if-else条件,但我想要一个更简洁的解决方案。这可能吗?

4 个答案:

答案 0 :(得分:1)

在PHP中,每个决策make语句都返回一个布尔值,无论是true还是false。所以,echo 3==3;是一个真实的陈述,这就是为什么它返回1而echo 3==2;是一个假陈述,这就是为什么它什么都不返回。

但是如果要回显出关联的false整数(即0),那么可以使用类型转换。像:

echo (int)(3 == 2);

它将打印出0。

答案 1 :(得分:0)

测试代码     

// http://php.net/manual/en/language.operators.comparison.php

echo 3==3;

echo "<br>---------------<br>";

echo 3==2;

echo "<br>---------------<br>";

var_dump(3==3);

echo "<br>---------------<br>";

var_dump(3==2);

输出

1
---------------

---------------

boolean true


---------------

boolean false

原因是没有输出是你试图回应布尔值&#34; false&#34;,它什么都不打印。

答案 2 :(得分:0)

语句3 == 2的计算结果为false,并且如示例部分中echo的PHP文档中所述,运行echo false不会打印任何内容,因为它&#39;从技术上讲,它不是一种功能。但是,您可以使用var_dump代替。

echo 3 == 2; // no output
echo false; // no output

var_dump(3 == 2); // outputs bool(false)
var_dump(false); // outputs bool(false)

答案 3 :(得分:0)

the documentation on stringssection about casting to string中提供了关于为什么评估为echo false;的语句打印空字符串的问题的实际原因:

  

转换为字符串

           

可以使用(string)强制转换或者将值转换为字符串   strval()函数。 字符串转换自动完成   表达式的范围,需要字符串。这发生在   使用echo或print函数,或将变量与a进行比较时   string。类型和类型杂耍的部分将成为   以下更清楚。另请参见settype()函数。

     

布尔值TRUE值转换为字符串“1”。 布尔值为FALSE   转换为“”(空字符串)。这允许转换回来   在布尔值和字符串值之间。

您无法按照您尝试的方式测试未选中复选框的原因是浏览器不会在表单提交时发送未经检查的复选框状态。

这个难题的典型解决方案是:

  1. 跟踪后端中的所有可用复选框,并在收到表单提交后进行比较。
  2. 在实际复选框之前在HTML表单中添加隐藏字段,使其与复选框名称相同,并显示表示未选中状态的值。

    <input type="hidden" name="checkbox1" value="0">
    <input type="checkbox" name="checkbox1" value="1">
    

    这些隐藏字段在表单提交时提交,如果选中 1 ,将被复选框值覆盖。

    1)如果选中该复选框,则实际上都会发送这些值,但是如果它们具有相同的参数名称,则PHP将使用稍后接收的值覆盖任何先前接收的值(除非参数名称表示没有明确的密钥名称,例如name="checkbox[]"而不是name="checkbox[1]")。