在PHP中 == 和 === 都是进行数值匹配判断
== 只进行数值判断
=== 进行数值加变量类型判断
$v1 = "1"; $v2 = 1; if ($v1 == $v2) { echo("true<br/>"); } else { echo("false<br />"); } if ($v1 === $v2) { echo("true<br/>"); } else { echo("false<br />"); }
输出:
true
false
本文主要讨论在进行 == 判断时 数字和字符串(字符)之间的关系
在php中 == 判断时,当数字与字符串作比较时,系统会先将字符串转化为数字,再与数字进行比较。
解释了上述代码。
这时候我们再看一段代码
<?php $a = 1; $b = "text"; if ($a == $b) { echo "true"; } else { echo "false"; }
输出
false
我们改动代码
<?php $a = 0; $b = "text"; if ($a == $b) { echo "true"; } else { echo "false"; }
结果输出
true
奇怪了,明明不相等为什么会返回true?
原理:数字和字符串进行比较时,当这个字符串是一个无法转换为数字的字符串,它就会被强制转化为数字,结果总是为0
所以$b此时为被强转为0 判断0等于0 成立 所以返回true
我们再思考,当字符串里是数字+字符(字符串)时会不会转换为数字呢,还是强制转换为0?
进过实验,此时有四种情况:
1.数字+字符(字符串)
2.字符(字符串)+数字
3.数字+字符(字符串)+数字
4.字符(字符串)+数字+字符(字符串)
1..数字+字符(字符串)
<?php $a = 888; $b = "888a"; if ($a == $b) { echo "true"; } else { echo "false"; }
输出 true
数字+字符(字符串) 可以被转换为数字
取数字+字符(字符串) "888a" 中字符(字符串) a 前的数字 888 为转换后的数字
2.字符(字符串)+数字
<?php $a = 888; $b = "a888"; if ($a == $b) { echo "true"; } else { echo "false"; }
输出 false
<?php $a = 0; $b = "a888"; if ($a == $b) { echo "true"; } else { echo "false"; }
输出true
字符(字符串)+数字 属于无法转换为数字的字符串 被强制转换为0
3.数字+字符(字符串)+数字
<?php $a = 808; $b = "8a8"; if ($a == $b) { echo "true"; } else { echo "false"; }
输出 false
<?php $a = 88; $b = "8a8"; if ($a == $b) { echo "true"; } else { echo "false"; }
输出 false
<?php $a = 0; $b = "8a8"; if ($a == $b) { echo "true"; } else { echo "false"; }
输出 false
<?php $a = 8; $b = "8a8"; if ($a == $b) { echo "true"; } else { echo "false"; }
输出 true
说明字符串为 数字+字符(字符串)+数字 时是可以被转换的,但只是取字符(字符串)前的数字。既取 8
所以输出 true
4.字符(字符串)+数字+字符(字符串)
<?php $a = 88; $b = "a88a"; if ($a == $b) { echo "true"; } else { echo "false"; }
输出 false
<?php $a = 880; $b = "a88a"; if ($a == $b) { echo "true"; } else { echo "false"; }
输出 false
<?php $a = 0; $b = "a88a"; if ($a == $b) { echo "true"; } else { echo "false"; }
输出 true
说明 字符(字符串)+数字+字符(字符串)不能被转换为数字,被强制转换为0
我们对第三、四种情况再进行扩展
判断 数字+字符(字符串)+数字+字符(字符串)是什么情况
<?php $a = 8; $b = "8a8aaa"; if ($a == $b) { echo "true"; } else { echo "false"; }
输出 true
说明字符串为 数字+字符(字符串)+数字+字符(字符串) 时只取第一次出现字符(字符串)前的数字为转换值。
那 数字+字符(字符串)+数字+字符(字符串)+数字呢?
<?php $a = 8; $b = "8a8aaa8"; if ($a == $b) { echo "true"; } else { echo "false"; }
输出 true
说明字符串为 数字+字符(字符串)+数字+字符(字符串)+数字 时,还是只取第一次出现字符(字符串)前的数字为转换值。
判断 字符(字符串)+数字+字符(字符串)+字符(字符串) 是什么情况?
<?php $a = 0; $b = "a88a8"; if ($a == $b) { echo "true"; } else { echo "false"; }
输出 true
说明 字符(字符串)+数字+字符(字符串)+数字 不能被转换为数字,被强制转换为0
我们可以延伸总结 :
1.当字符串中 以 数字开头 +字符串+数字或字符(字符串)+... 格式与数字进行 == 判断时,
会取第一次出现字符(字符串)前的数字作为转换值。
2.当字符串中 以 字符(字符串)开头 +数字+数字或字符(字符串)+... 格式与数字进行 == 判断时,
不能转换为数字,被强制转换为0