美文网首页
坑人的几道PHP题目

坑人的几道PHP题目

作者: lookphp | 来源:发表于2018-01-25 10:23 被阅读20次
    • 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, if array_or_countable is NULL, 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题的答案。

    相关题目

    相关文章

      网友评论

          本文标题:坑人的几道PHP题目

          本文链接:https://www.haomeiwen.com/subject/jqscattx.html