在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