if(NULL ==0){
echo "test". NULL;//output is test
echo "<br>";
echo "test". 0;//output is test0
}
如果条件说 null 和 0 都相等。但是为什么我会得到这个结果呢?
您使用了松散比较==
。如果您使用严格比较===
那么您会发现差异。
阅读更多 :
type comparison table
NULL in PHP
因为这取决于您是将 0 视为数字零(如无(还是字符串(如字符"0"(。
PHP 中的 NULL 具有以下属性:
空 == 空为真,
NULL == FALSE 为真。
根据关系模型,NULL == TRUE 失败
在这里,您将 NULL 与 false 进行比较,后者的输出在 PHP 中为真
正如 Nick 已经说过的:在这种情况下,您将值0
添加到一个字符串中,使其成为字符串。这就是为什么你得到值test0
.
此外,在您的if
中,您正在检查零值,而不是严格的真或假陈述:
<?php
if( NULL == 0 ) {
echo "test" . NULL;
echo "<br>";
echo "test" . 0;
}
?>
输出:
test
test0
现在像这样尝试一下:
<?php
if( NULL === 0 ) {
echo "test" . NULL;
echo "<br>";
echo "test" . 0;
}
?>
你会看到,你没有得到任何输出,因为现在if
语句是假的。
NULL
没有值,在您的比较中,它的评估值为 False,0
也被评估为 False(因此 False == False,这是 True(,这就是循环主体执行的原因。
NULL
明确表示"没有价值"。请参阅文档以了解NULL
的确切含义。
因为如果你连接一个字符串,没有任何内容(null(,字符串将保留在原处,如果你与整数"0"连接,它将被强制转换为字符串(自动装箱(并被转换为原始字符串...
正常行为?
和 "null == 0" ->true,但 "null === 0" -> false...
您不仅必须检查 VALUE(对于两个 itc 来说都是"零"(,您还必须检查 TYPE 与 "===" 的相等性
因为,NULL 字符串不是要打印的。因此,第一个 echo 语句
连接:"test" . NULL => "test" Then Nothing
虽然 0 是逻辑 NULL,但在字符串的情况下,它打印为 0。
在 PHP 中,如果将任何值与数字进行比较,则该值将被类型转换为 Int 或 Float,然后进行比较。在您的情况下,NULL 首先类型转换为 Int,这将产生 0,然后进行比较,给出 TRUE。检查 PHP 类型比较和类型杂耍。