当起始变量从布尔变量获取值时,无限循环

时间:2018-11-09 18:31:12

标签: php

对于PHP 7.2.11,我有一个非常简单的MCVE:

$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-以非常轻松的隐式类型转换而闻名。

PHP不会递增$count,并且无论初始变量是什么类型[{boolintfloat,都不得为public class TimeZoneN { public static void main( String[] args ) throws ParseException { String timeStr1 = "2018-11-08_21h34m46sZ"; String formatStr1 = "yyyy-MM-dd_HH'h'mm'm'ss's'Z"; SimpleDateFormat formatter = new SimpleDateFormat( formatStr1 ); formatter.setTimeZone( TimeZone.getTimeZone( "UTC" ) ); Date date1 = formatter.parse( timeStr1 ); System.out.println( date1 ); } } 有。

2 个答案:

答案 0 :(得分:1)

手册并非非常明确mention it。但是++只是布尔值未定义。而真正的算术运算(false + 1)确实会增加到true

更具体地说,请看zend_operators.c

  • 它对于IS_BOOLEAN变量根本不起作用。

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

尽管可以,但您不会误会。因为您知道,它做到了。在PHP3中。

答案 1 :(得分:0)

$loopStart = 150 < 100 + 15;的计算结果为false$count也是如此。 $count++的值为false,而false始终小于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