加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱资讯网 (https://www.52junxun.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2023-02-02 14:50:23 所属栏目:PHP教程 来源:
导读:  living example one

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

  1)PHP的弱类型

  2)PHP的运算符的优先级

  本节主要讨论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这样的字符串,那么就会返回2PHP运算符,再者如果为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
 

(编辑:我爱资讯网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!