首先,我在这里处理 1 和 0,我很清楚 1 == true 和 0 == false。但是我很好奇为什么这不起作用:
$var = 1;
echo $var; /* 1 */
$var = $var === 0;
echo $var; /* Nothing */
是否有第二个实例echo $var;不返回 0(假)而是不返回任何内容的原因?
同样,!$var也不返回任何内容。是什么导致了这种行为?
首先,我在这里处理 1 和 0,我很清楚 1 == true 和 0 == false。但是我很好奇为什么这不起作用:
$var = 1;
echo $var; /* 1 */
$var = $var === 0;
echo $var; /* Nothing */
是否有第二个实例echo $var;不返回 0(假)而是不返回任何内容的原因?
同样,!$var也不返回任何内容。是什么导致了这种行为?
var_dump()使用代替更容易显示正在发生的事情echo,因为显示了类型:
$var = 1;
var_dump($var); /* int(1) */
$var = $var === 0;
var_dump($var); /* bool(false) */
$var最后是假的,因为$var === 0评估为假,然后将该值分配给$var.
echo由于 boolean false 评估为空字符串,因此最终没有输出任何内容:请参阅http://www.php.net/manual/en/language.types.string.php
0false在松散的比较中等于,但0 不是false。变量设置为false,并且false回显到字符串中的是""(空字符串)。
请参阅http://www.php.net/manual/en/language.types.string.php#language.types.string.casting。
那是因为
$var = $var === 0;
可以读作:
$var = ($var === 0); // sets $var to the result of the comparison
在正确的优先级。现在当$varis时1,($var === 0)返回false通过 输出时表示为空字符串echo。
false您可以通过使用运算符将值显式转换为整数来查看“0” (int):
echo (int)$var; // ouputs "0"
falsePHP 将值表示为空字符串,因为 PHP 变量通常没有类型。没有 boolean、int 或 string - 仅在值的内部表示中(在 Zend 引擎中称为 ZVAL)。
在 PHP 代码中,ZVAL 会自动转换为最匹配的类型,具体取决于您使用它的位置。这称为类型杂耍Docs。
如果添加 var_dump($var); 在那个小块的末尾,你会看到 $var = false。
那是因为 $var === 0; 是假的;
代码的关键部分是这样的:
echo $var;
echo构造接收并生成字符串。如果您的变量是布尔值,则应用适当的转换:
布尔 TRUE 值转换为字符串“1”。Boolean FALSE 被转换为 ""(空字符串)。这允许在布尔值和字符串值之间来回转换。
这就是为什么echo不是一个好的调试工具的原因,因为将所有内容展平为字符串会导致有价值信息的丢失,除非您使用的工具知道如何提取该信息(并且echo不知道)。为此,var_dump()通常是更好的选择。
$var = $var === 0;$var === 0将(即false)的结果分配给$var. 并且echo false不产生任何输出。
当您使用===时,它还匹配数据类型。所以在这种情况下,1 === TRUE 不是 TRUE。
$var = 1;
echo $var; /* 1 */
$var = $var === 0;
echo $var; /* Nothing */
在你的第三行,$var === 0评估为FALSE,所以,就像你把
$var = FALSE;
您不能打印布尔字符。但是,如果你var_dump($var);,你会看到它是一个布尔值 FALSE。