关于运算符优先级的一个面试题
2017-07-04 15:42
183 查看
[php] view
plain copy
<?php
$a = 3;
$b = 5;
if ($a = 5 || $b = 7) {//这里意外赋值
var_dump($a);//boolean true
var_dump($b);//int 5
$a++;
$b++;
var_dump($a);//boolean true
var_dump($b);//int 6
}
echo $a.'----'.$b;
?>
这是那个面试题,我给加上了4个var_dump函数。
这个题目的最后输出结果: 1 ---- 6为什么会是这样呢?
我们先看 if ($a = 5 || $b = 7) { 这里 ,这里 $a 被意外赋值 (大家平时不要这么写,容易出现问题的)那这个if () 里面的 $b 是不是意外赋值呢?
答案是, $b 没有意外赋值,因为 括号里面 || 后面的$b=7 没被执行。
因为,if($a =5 ) 这里 $a = 5 的时候,$a 已经变成 true了, || 或运算后面的就不会被执行。
(‘||’优先于“=”)
符合if条件,直接执行if 里面的内容。
我们可以看到 第一个 var_dump($a) 输出 boolean true ;var_dump($b) 输出int 5又一个问题,$a++ 之后,为什么不是2呢?
true 为什么不转换为整数 1 呢?
手册上不是写着:
要明示地将一个值转换为 integer,用 (int) 或 (integer) 强制转换。不过大多数情况下都不需要强制转换,因为当运算符,函数或流程控制需要一个 integer 参数时,值会自动转换。还可以通过函数 intval() 来将一个值转换成整型。
再看下手册中关于 自增/自减 的内容:
递增/递减运算符不影响布尔值。递减 NULL 值也没有效果,但是递增 NULL 的结果是 1。
$a = null;
$b = true;
$a++;
$b++;
echo $a;//1,自动转换为 整数 1 输出
echo $b;//1
var_dump($b);//bool(true)
plain copy
<?php
$a = 3;
$b = 5;
if ($a = 5 || $b = 7) {//这里意外赋值
var_dump($a);//boolean true
var_dump($b);//int 5
$a++;
$b++;
var_dump($a);//boolean true
var_dump($b);//int 6
}
echo $a.'----'.$b;
?>
这是那个面试题,我给加上了4个var_dump函数。
这个题目的最后输出结果: 1 ---- 6为什么会是这样呢?
我们先看 if ($a = 5 || $b = 7) { 这里 ,这里 $a 被意外赋值 (大家平时不要这么写,容易出现问题的)那这个if () 里面的 $b 是不是意外赋值呢?
答案是, $b 没有意外赋值,因为 括号里面 || 后面的$b=7 没被执行。
因为,if($a =5 ) 这里 $a = 5 的时候,$a 已经变成 true了, || 或运算后面的就不会被执行。
(‘||’优先于“=”)
符合if条件,直接执行if 里面的内容。
我们可以看到 第一个 var_dump($a) 输出 boolean true ;var_dump($b) 输出int 5又一个问题,$a++ 之后,为什么不是2呢?
true 为什么不转换为整数 1 呢?
手册上不是写着:
要明示地将一个值转换为 integer,用 (int) 或 (integer) 强制转换。不过大多数情况下都不需要强制转换,因为当运算符,函数或流程控制需要一个 integer 参数时,值会自动转换。还可以通过函数 intval() 来将一个值转换成整型。
再看下手册中关于 自增/自减 的内容:
递增/递减运算符不影响布尔值。递减 NULL 值也没有效果,但是递增 NULL 的结果是 1。
$a = null;
$b = true;
$a++;
$b++;
echo $a;//1,自动转换为 整数 1 输出
echo $b;//1
var_dump($b);//bool(true)
相关文章推荐
- 一个面试题,关于运算优先级和递增递减
- 以前的一个面试题,关于异常的小练习!
- 【我解C语言面试题系列】007 运算符优先级问题
- 关于C语言中的指针的总结与运算符的优先级的总结
- 一个关于算法的面试题,来源于网络
- 前几天遇到的一个面试题,关于中文字符截取的问题。IO流的应用
- 关于运算符的一个例子
- 一个微软面试题--关于位结构体
- 一个关于多线程的面试题,网上大多给了错误的答案
- [VC] 一个微软面试题--关于位结构体
- 一个关于java线程的面试题
- 关于阶乘的两个常见算法及一个相关面试题
- 关于阶乘的两个常见算法及一个相关面试题
- 一个关于图的面试题(未解)
- 一个关于多线程的面试题,网上大多给了错误的答案
- 【我解C语言面试题系列】007 运算符优先级问题
- 一个关于截取字符串的面试题!
- 关于阶乘的两个常见算法及一个相关面试题
- 听说是sun的一题面试题(关于自增运算符的)
- 一个面试题关于变量的生命周期