Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP运算符的奇怪行为_Php - Fatal编程技术网

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我已经更新了我的答案,以反映您最近的编辑。