在PHP中 == 和 === 都是进行数值匹配判断
== 只进行数值判断
=== 进行 数值加 变量类型 判断
eg:
$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";
}
输出
我们改动代码
<?php
$a=0;
$b="text";
if($a==$b){
echo "true";
}
else{
echo "false";
}
结果输出
奇怪了,明明不相等为什么会返回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 。