===
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”
答案 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)
。