Это мое (интуитивное) понимание того, что с помощью оператора присваивания сложения +=
в PHP переменные целочисленного типа приводят к результату сложения, в то же время увеличивая левый операнд на значение правого операнда одновременно.
Это понимание кажется неправильным, поэтому мой вопрос. Учитывая следующий фрагмент кода:
$itr = 10;
$incr = 10;
if ($itr += $incr > 10) { // evaluates as true...
echo $itr; // but value of $itr remains unchanged
}
Почему выводится 10 вместо 20?
То же самое происходит с использованием троичной формы:
echo ($itr += $incr > 10) ? $itr : 'neverhere'; // prints 10
// Note: I know that parentheses aren't really necessary here, it's just a personal practice.
Что здесь происходит?
Редактировать: Ну, я узнал, что вокруг выражения $itr += $incr
с помощью скобок исправляет очевидную проблему. Тем не менее, правильное объяснение того, почему было бы очень круто. Моя благодарность заранее.
Приоритет оператора: >
оценивается первым и приводит к false
, Когда приведен к целому числу, чтобы добавить к вашей ценности, false
приведен к 0
,
Так:
$itr += $incr > 10
будет выглядеть так:
$itr += ($incr > 10)
$itr += (false)
$itr += 0
В операторе if вы только оцениваете возможность увеличения $ itr на $ incr, но вы не эффективно УСТАНАВЛИВАЕТЕ PHP для этого. Таким образом, он никогда не хранит новое значение.