代码之家  ›  专栏  ›  技术社区  ›  Peter VARGA

当start变量从bool变量获取值时,循环为无穷循环

php
  •  0
  • Peter VARGA  · 技术社区  · 7 年前

    $loopStart = 150  < 100 + 15;
    for ( $count = $loopStart ; $count < 3 ; $count++ )
    {
        echo sprintf( "count=%d<br>", $count );
    }
    die("finished");
    

    运行脚本时,我希望得到以下输出:

    count=0
    count=1
    count=2
    finished
    

    执行此脚本将导致 无止境的 环路在哪里 $count 从未 得到增量。

    $loopStart = intval(150 < 100 + 15); 作品-->for循环迭代3次,然后结束。

    我是否错过了一些东西,或者这是一个非常有趣的PHP错误?在我看来,PHP对于结果为 bool 但是,特别是PHP,它以非常轻松的隐式类型转换而闻名。

    增量 美元计数 无论是哪种类型,这都不能是[ 布尔 int float ]初始变量为。

    2 回复  |  直到 7 年前
        1
  •  1
  •   mario    7 年前

    手册上没有 mention it 非常明确。但是 ++ 对于布尔人来说,它只是没有定义。而实数运算 (false + 1) 确实增加到 true .

    更具体地看 zend_operators.c

    • 这对我来说根本没有任何作用 IS_BOOLEAN

    • 好像它忽略了数组和其他一些类型。

    如果你认为它有效,你就不会错了。因为你知道,的确如此。在PHP3中。

        2
  •  0
  •   AbraCadaver    7 年前

    $loopStart = 150 < 100 + 15; 评估为 false 我也是 $count $count++ 假的 假的 3 :

    $loopStart = 150  < 100 + 15;
    for ( $count = $loopStart ; $count < 3 ; $count++ ) {
        var_dump($count);
        var_dump($count < 3);
        var_dump($count++);
        exit;
    }
    

    产量:

    bool(false)
    bool(true)
    bool(false)
    

    看见 https://3v4l.org/rMECJ

    推荐文章