Бесконечный цикл for, когда переменная start получает значение из переменной bool

У меня есть очень простой MCVE для PHP 7.2.11:

$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] исходная переменная имеет.

0

Решение

Руководство не говоря это очень явно. Но ++ просто не определено для логических значений. В то время как настоящая арифметическая операция (false + 1) действительно увеличивает true,

Более конкретно посмотрите на zend_operators.c

  • Это просто ничего не делает для IS_BOOLEAN вары.

  • Как это игнорирует массивы и несколько других типов.

Вы бы не ошиблись, если бы вы работали. Потому что вы знаете, это было. В PHP3.

1

Другие решения

$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

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector