php, бесконечный цикл в цикле while()

/// infinite loop??
$x=1; 
while($x=9){ 
echo $x;
$x++;
}

я не понимаю причину, почему приведенный выше код вызывает бесконечный цикл, на мой взгляд, приведенный выше код должен выводить «9» один раз. но выводит бесконечные 999999999......

сначала (когда x равно 1), пока утверждение ложно, поэтому ничего не происходит, затем x становится равным 2, но снова, пока утверждение ложно;

Итак, когда x становится 9, в то время как оператор истинен, поэтому он должен выводить 9, тогда мы добавляем 1 из-за x++; и становится 10, поэтому утверждение становится ложным, но, как я вижу, это не так, потому что

он продолжает повторять 9999999.......

Пожалуйста, просветите меня относительно приведенного выше кода. с уважением.

примечание: я проверил похожие вопросы, но не могу найти ответ для своей ситуации, спасибо


person jwin    schedule 18.09.2011    source источник
comment
По этой причине вы увидите запись if (9 == $x) во многих случаях, чтобы избежать таких ошибок.   -  person JRL    schedule 19.09.2011
comment
Я думаю, вы должны были предположить, что что-то не так с самого первого момента, когда ваш x = 9 попал в цикл while. Если условие while ложно, тогда $x++ даже не запустил бы все.   -  person Felype    schedule 17.07.2015


Ответы (3)


$x=9 — это присваивание, и оно всегда верно. Возможно, вы имели в виду $x==9 или какой-то другой оператор отношения.

person Ignacio Vazquez-Abrams    schedule 18.09.2011

Ты имеешь в виду

$x == 9

Но в вашем примере это ничего не даст, потому что $x != 9. Вероятно, вы имели в виду

while($x < 9)
person genesis    schedule 18.09.2011
comment
Тема старая, но вдруг кто прочитает. Но в вашем примере это ничего не даст, потому что $x != 9. Вероятно, вы имеете в виду, что while($x ‹ 9) неверно. Если он ДЕЙСТВИТЕЛЬНО напишет $x == 9, то цикл while остановится, как только $x станет равным 9. Таким образом, он выведет 123456789, а затем остановится. - person Rick; 30.08.2019

Вы присваиваете значение 9 переменной x вместо выполнения реляционного сравнения. Распространенная ошибка. = — это оператор присваивания, тогда как == — это оператор сравнения на равенство.

http://en.wikipedia.org/wiki/Assignment_(computer_science)#Assignment_versus_equality

person BRampersad    schedule 18.09.2011