例1:
$str = ‘haodaquan';
echo ($str == 0) ? 1 : 0;

运行结果是:
1
这个坑,在好多公司的笔试题里涌现,当然没有这么直接的考,会隐晦一些,比如下面的题目:例2
$arr = [1,'aa'=>[2,2]];
foreach ($arr as $key => $value) {
if ($key=='aa') {
var_dump($value);
}
}
叨教打印的结果是什么?
事理是一样的:比较0==‘aa’,都是稽核字符串和数字比较较,即数据类型转换的问题。
结果如下:
int(1)
array(2) {
[0]=>int(2)
[1]=>int(2)
}
二、防坑攻略在做比较运算时,应考虑比较双方的类型,弱类型措辞虽然对变量数据没有严格哀求,编程时也该当对变量数据的类型有所剖断。
三、为何有坑“==”表示先将比较双方的类型转化成同一类型,然后在对值进行比较。在例1中,比较”haodaquan“==0,首先将字符串”haodaquan“默认转换为integer类型(为啥是integer类型呢?后面揭晓),我们知道 (int)”haodaquan“=0,而0==0是成立的,以是结果显示为1。
四、防坑扩展彻底弄清楚这些类型转换(便是刚才例1中为啥转换为integer类型)才是防坑的关键。在php中数据类型之间的转换分为两种:逼迫类型转换和自动类型转换(有的也叫默认类型转换)。
1、逼迫类型转换
php数据类型转换的方法有三种,这里我们以字符串转浮点型为例,其他类型请自行查手册
$s = \"大众1a22aa.121\"大众;
#第一种逼迫类型转换:
var_dump((float)$s);
#第二种逼迫类型转换:
var_dump(floatval($s));
#第三种逼迫类型转换:
settype($s, 'float');
var_dump($s);
我常常利用第一种,大略。
其余,字符串逼迫转换浮点型或者整型,会从左边逐一检讨字符串,碰着不合格的字符涌现就停滞。
2、自动类型转换
1、算数运算符(加、减、乘、除、取余数等),自动按照数字型变量进行处理,也便是说,这些都是合法的。
$a = '123b';
$b = '12b';
var_dump($a+$b,$a-$b,$a$b,$a/$b,$a%$b);
2、“==” 做比较,如果比较一方是布尔型,则另一方转为布尔型再比较值。
如果比较一方是浮点型,则另一个先转为浮点型进行比较。(另一方非布尔型)
如果比较一方是数字型,则另一个先转为数字型(int)进行比较。(另一方非布尔型和浮点型)
以上估计够用了,想要更加深入,请参考php手册里的《PHP手册类型表》一节。
五、防坑互动:1、下面代码:
$s = \"大众1.23a22aa.121\"大众;
var_dump((float)$s);
结果显示是:??
2、补上期的互动题目,也是笔试题里常常设置的坑题:
$a = count (\"大众abc\"大众);
$b = count (\"大众\"大众);
$c = count (null);
$d = count (false);
var_dump($a,$b,$c,$d);
结果显示是:??
3、补充一个烧脑的,估计答对的少:
$a = '123b';
$b = '12a';
var_dump($a<$b);
结果显示是:???
请看官们谈论结果吧 !
^_^
PS:开通头条以来第三篇文章,有些愉快,也有些紧张,这么多朋友捧场,也不知道看官们是否有收成。大家韶光宝贵,您看文费时,我写文也费时(特殊是代码,都是编辑器里粘出来的,经由测试的),但也唯恐摧残浪费蹂躏了大家韶光。总之,我恳切作文,不敷难免,请大家示正。