前段时间写的代码运行总有问题,后来一查是因为判断的问题,判断前端传来的字符串是否是预期的值,比如这样的代码
<?php
$Input = '2,321';
if ($Input == 2) {
echo '相等';
} else {
echo '不等';
}
这样输出的结果是相等,而一旦去掉逗号就会输出不等
略微思考和验证了下,这是因为php的隐式类型转换造成的问题
由于php是弱类型语言,可以将不同类型的变量进行比较,比较的时候php便会尝试进行转换类型,'2,321'会被尝试转换为数字
通过手动调用intval函数对'2,321'进行转换得到整数2,正好与右边的2相等,所以为true
不过我有点不清楚为什么不是2被隐式转换为字符串2呢,我尝试了更换左右结果一样,这个优先级是如何确定呢?