为什么我在 php 中得到这个结果


Why did i get this result in php?

 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 类型比较和类型杂耍。