PHP运算符的奇怪行为
=== 产出:PHP运算符的奇怪行为,php,Php,=== 产出: echo var_dump( ! end($lines)['id'] === $r['line_id'] ); echo var_dump( ! end($lines)['id'] == $r['line_id'] ); == 产出: echo var_dump( ! end($lines)['id'] === $r['line_id'] ); echo var_dump( ! end($lines)['id'] == $r['line_id'] ); 但是 bool(t
echo var_dump( ! end($lines)['id'] === $r['line_id'] );
echo var_dump( ! end($lines)['id'] == $r['line_id'] );
==
产出:
echo var_dump( ! end($lines)['id'] === $r['line_id'] );
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'] );
为什么??前两个例子应该完全相同吗
注意:在本例中,end($lines)['id']不存在,$r['line_id']是:string(1)“2”当使用
==
比较器时,它比较数据类型和值。由于相同的表达式(尽管使用了=
比较器(仅比较值)的计算结果为bool(true)
,因此我们可以假设这些变量是相同的值,但不是相同的类型。有关详细信息,请参阅
在第二个示例中,您没有使用
运算符对end($lines)['id']
引用求反,该引用在您的情况下不会产生等价性
在您的情况下,未设置的变量将计算为
FALSE
布尔值,而设置的$r['line\u id']
将计算为TRUE
布尔值。因此,!FALSE==TRUE
。有关PHP这一方面的更多信息,请参阅表中的列boolean:if($x)
column$x与PHP函数的比较
同样,表达式
!end($lines)['id']==$r['line_id']
将产生bool(false)
,因为end($lines)['id']
没有数据类型,$r['line_id']
是字符串(1)
。因此,==
比较器返回bool(true)
的数据类型不匹配。抱歉,我做了一个快速编辑,并在发布后不久添加了变量。您可以在文章的底部看到它们。@Cggart我已经更新了我的答案,以反映您最近的编辑。