记录一次数字和字符串比较时候犯的错误

请看如下代码

$app_name=$request->input('app_name',0);
if($app_name=='MyName'){
    echo 'true';
}else{
    return 'false';
}

输出结果

结果为 true

分析

我们可能会觉得奇怪,明明这两个不相等,为什么会输出 true呢,这里这段代码犯了一个低级错误,当app_name 参数不传递的时候,那么默认的app_name变量值为0.
php中数字和字符串进行比较时,当这个字符串是一个无法转换为数字的字符串,它就会被强制转化为数字,结果总是为0,所以我们就知道了原因了。

本作品采用《CC 协议》,转载必须注明作者和本文链接
人生的意义在于承担人生无意义的勇气
讨论数量: 3

所以尽量用全等号

4年前 评论
阿隆索逃跑了 (楼主) 4年前

这是个很基本的问题,根据你app_name这个命名应该就是个字符串,字符串默认值就不应该用 0 ,用'',null,false 才对。 数字与字符串比较,看字符串开头是否是合法数值,是的话可以转为合法数字,不然是转为0

3年前 评论
阿隆索逃跑了 (楼主) 3年前

8.0 好像解决这个问题了

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!