前段时间写的代码运行总有问题,后来一查是因为判断的问题,判断前端传来的字符串是否是预期的值,比如这样的代码

<?php
$Input = '2,321';
if ($Input == 2) {
    echo '相等';
} else {
    echo '不等';
}

这样输出的结果是相等,而一旦去掉逗号就会输出不等

略微思考和验证了下,这是因为php的隐式类型转换造成的问题

由于php是弱类型语言,可以将不同类型的变量进行比较,比较的时候php便会尝试进行转换类型,'2,321'会被尝试转换为数字

通过手动调用intval函数对'2,321'进行转换得到整数2,正好与右边的2相等,所以为true

不过我有点不清楚为什么不是2被隐式转换为字符串2呢,我尝试了更换左右结果一样,这个优先级是如何确定呢?

11-07 02:03