PHP面试常考易错题之弱类型转换
living example one
$tmp = 0 == "a" ? 1:2; echo $tmp; //output 1
考点:
1)PHP的弱类型
2)PHP的运算符的优先级
本节主要讨论PHP弱类型问题,优先级下一章节再进行讨论
分析:
1)在PHP中如果数值和字符串进行比较的时候,PHP会将非数字开头的字符串转换成为整数0,如果前
面有数字值则会转化成为开头的数值进行比较,那么题上的输出为1
2)相反,如果是2a这样的字符串,那么就会返回2,再者如果为a2这种的还是会返回1
3)如果放在js里面那就不一样了。会返回一个:var tmp = 0 =='1a'?1:2; alert(tmp); 这样会输出为2
4)运算符优先级: == > 三元运算 >赋值运算
living example two
$str1 = 'yabadabadoo'; $str2 = 'yaba'; if (strpos($str1,$str2)) { echo "\"" . $str1 . "\" contains \"" . $str2 . "\""; } else { echo "\"" . $str1 . "\" does not contain \"" . $str2 . "\""; } 正确运行的输出结果: "yabadabadoo" does not contain "yaba" 解析: 1)strpos是返回字符串str2在str1的位置,没有找到则返回false然而实际上这次返回了0而在if语句中0 也被当作false,所以,我们需要对false做类型判断,正确的代码如下: $str1 = 'yabadabadoo'; $str2 = 'yaba'; if (strpos($str1,$str2) !== false) { echo "\"" . $str1 . "\" contains \"" . $str2 . "\""; } else { echo "\"" . $str1 . "\" does not contain \"" . $str2 . "\""; }
需要注意的是我们使用了!==,在php 和 JS中= !相对== 更为严格需要要求数据类型的一致。
living example three
echo 'Testing ' .1+2.'45';
考点:
PHP的弱类型和运算符的优先级以及"+"号在PHP中和其他语言的不同
解析:
运算的结果步骤:
1)echo 'Testing1'+2.'45';
2)echo 2.'45';
3)echo '245';
"+-."三者的优先级是一样,因此程序是从左向右依次执行,进入数值计算会将字符串硬性转换为
数值,php数值计算会强制转化字符串,如果前面有数字就第一个为最终值 如果没有就是0
相关推荐
songshijiazuaa 2020-09-01
zyyjay 2020-11-09
xuebingnan 2020-11-05
samtrue 2020-11-22
stefan0 2020-11-22
yifangs 2020-10-13
songshijiazuaa 2020-09-24
hebiwtc 2020-09-18
天步 2020-09-17
83911535 2020-11-13
whatsyourname 2020-11-13
zhouyuqi 2020-11-10
Noneyes 2020-11-10
mathchao 2020-10-28
王志龙 2020-10-28
wwwsurfphpseocom 2020-10-28
diskingchuan 2020-10-23