PHP面试常考易错题之弱类型转换

2022-10-11 22:03:49 154 0
魁首哥

living example one

$tmp = 0 == "a" ? 1:2;
echo $tmp; 
//output 1
 

考点:

1)PHP的弱类型

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

收藏
分享
海报
0 条评论
154
上一篇:php变量名中不能包含哪些字符? 下一篇:PHP是世界上最好的语言?某程序员怼产品:PHP有局限性,实现不了

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码