首先,我在这里处理 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
0
false
在松散的比较中等于,但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
在正确的优先级。现在当$var
is时1
,($var === 0)
返回false
通过 输出时表示为空字符串echo
。
false
您可以通过使用运算符将值显式转换为整数来查看“0” (int)
:
echo (int)$var; // ouputs "0"
false
PHP 将值表示为空字符串,因为 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。