前几天赶项目,遍历一组数据,类型是8或9的单独处理,当时是这样写的:
// 片段一 $type = '8'; if ($type != 8 || $type != 9) { echo 'do job_b' , PHP_EOL; } else { echo 'do job_a' , PHP_EOL; }
以上,期望输出”do job_a”, 但是输出的却是”do job_b”, 当时觉得很费解,无赖时间比较紧就换了一个写法:
// 片段二 if (!in_array($type, [8, 9])) { echo 'do job_b' , PHP_EOL; } else { echo 'do job_a' , PHP_EOL; }
以上,输出的是”do job_b”符合预期。
今天回顾的时候,发现之前的这个费解还在,稍微分析下代码片段一就会发现($type != 8)是false, ($type != 9)是true, 所以会进到if中。可是,如果按照人的思维,去想的话,很自然进到else才对啊,感觉被大脑欺骗了。是我的思维有问题,还是人的思维有问题呢?如果代码片段一运行在你的大脑你,10秒输出结果,你会输出什么,欢迎大家留言。
其实更直观的表达是:
// 片段三 if ($type == 8 || $type == 9) { echo 'do job_a' , PHP_EOL; } else { echo 'do job_b' , PHP_EOL; }
以上,输出的是”do job_a”。