- 1 . 以下代码执行结果是:
<?php
$a = 3;
$b = 5;
if($a = 5 || $b = 7)
{
++$a;
$b++;
}
echo $a." ".$b;
输出结果:1 6
原因:
1、运算符优先级没有搞明白;
2、递增/递减运算符不影响布尔值。
为什么直接true++不行, 也许在逻辑上, 只有”变“量的递增/递减才有意义, 常量/布尔值在内存中都是单独的区域,无法去改动的。
逻辑符号 "||" 的优先级导致,逻辑运算符“||”的优先级大于赋值运算符“=”,先执行(5 || $b),最后这个条件被程序判断为true,所以判断执行结果返回为true,转换为布尔值。
结果变成 if($a = true),将$a的值赋值为true,++true,布尔值的++,递增/递减运算符。
提示:多查手册,少百度。多看Note和Warning提示。
问题的原型
- 2 . 以下代码执行结果是:
<?php
$count = 5;
function get_count()
{
static $count = 0;
return $count++;
}
++$count;
get_count();
echo get_count();
输出结果:1
原因:作用域
- 3 . 以下代码执行结果是:
<?php
$a = count("567") + count(null) + count(false);
echo $a;
输出结果:2
原因:count(false)等于1,为什么?
这个问题可以参考官方的PHP手册,在count这个函数的返回值中有说明,如下:
返回值(Return Values)
返回 array_or_countable 中的单元数目。 如果参数既不是数组,也不是实现 Countable 接口的对象,将返回 1。 有个例外:如果 array_or_countable 是 NULL 则结果是 0。
Returns the number of elements in
array_or_countable
. When the parameter is neither an array nor an object with implemented Countable interface, 1 will be returned. There is one exception, ifarray_or_countable
isNULL
, 0 will be returned.
- 4 . 以下代码执行结果是:
<?php
$a = 0.2+0.7;
$b =0.9;
var_dump($a == $b);
输出结果:false
原因:浮点数在计算机中取近似值,为什么?
- 5 .以下代码执行结果是:
<?php
echo intval((0.1+0.7)*10);
?>
输出结果:7。
考查:浮点数的概念。
因 0.1+0.7=0.8 0.8*10=8
所以转换成整数后还是8?
错!因为 0.1+0.7=0.8
是浮点数,0.8*10
在数学计算中是正整数8,可是在计算机中它仍然是浮点数8,什么叫浮点数8?每一个看起来像整数的浮点数,其实都不是整数,比如这个8,它其实只是7.9999循环,无限接近于8,转换成整数会舍弃小数部分,就是7喽。
4和5题考察的是同一个知识点,原因可参考5题的答案。
网友评论