PHP运算符奇怪的行为

时间:2018-03-23 02:14:07

标签: php

===

echo var_dump( ! end($lines)['id'] === $r['line_id'] );

输出:

bool(false)

==

echo var_dump( ! end($lines)['id'] == $r['line_id'] );

输出:

bool(true)

,但....

echo var_dump( end($lines)['id'] === $r['line_id'] );
echo var_dump( end($lines)['id'] == $r['line_id'] );

两个输出:

bool(false)

为什么呢?前两个例子应该完全相同吗?

注意:在此示例中,end($ lines)['id']不存在且$ r ['line_id']为:string(1)“2”

1 个答案:

答案 0 :(得分:0)

使用===比较器时,会比较数据类型。由于相同的表达式虽然使用==比较器(仅比较)评估为bool(true),但我们可以假设这些变量是相同的,但不是相同的类型。有关详细信息,请参阅PHP: Comparison Operators

在第二个示例中,您没有使用!运算符来否定end($lines)['id']引用,这在您的情况下不会产生等效性。

在您的情况下,未设置的变量将评估为FALSE布尔值,而集合$r['line_id']将评估为TRUE布尔值。因此,!FALSE == TRUE。有关PHP这方面的更多信息,请参阅表{strong>与$ x与PHP函数的比较的PHP: PHP type comparison tables,特别是列boolean: if($x)列。

以同样的方式,表达式! end($lines)['id'] === $r['line_id']将产生bool(false),因为end($lines)['id']没有数据类型,$r['line_id']string(1)。因此,数据类型与===比较器不匹配,无法返回bool(true)