对于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
,并且无论初始变量是什么类型[{bool
或int
或float
,都不得为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 );
}
}
有。
答案 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)