Вы предполагаете, что условие не меняется.Вот где ты не прав.Вы можете переназначить значения внутри условия while.Результат
while ($row = mysqli_fetch_object($result))
mysqli_fetch_object
сохраняется в переменной $row
на каждой итерации.Переменная $row
будет оцениваться как логическое значение, и если $row
является объектом, он будет правдивым и, следовательно, попадет внутрь тела цикла.
Итак, на первой итерации вы получитесначала $row
, затем второй и т. д.
Если строк больше нет, mysqli_fetch_object
вернет null
.Null
будет сохранен в переменной $row
и оценен.Null
является ложным значением, и, следовательно, цикл прервется.
Скорее всего, вы неверно истолковываете состояние вашего мозга как:
$row == mysqli_fetch_object($result)
$row === mysqli_fetch_object($result)
Это полностью меняет значение.
Sidenote: переназначение в условиях - это то, что php допускает и в разных местах и может привести к-debug ошибки.
Например, if ($bool = false) { echo "I never will be printed";}
является действительным php и всегда приводит к проверке false
и, следовательно, никогда не выполняет true-ветвь.