Как получилось, что этот код ниже echo's 2 и не дает ошибку, просто игнорирует +1+2+3+4
?Incrementing numbers не дает ошибок
Я искал, но не смог найти ответ.
<?php
$i = 1;
$i+++1+2+3+4;
echo $i;
Как получилось, что этот код ниже echo's 2 и не дает ошибку, просто игнорирует +1+2+3+4
?Incrementing numbers не дает ошибок
Я искал, но не смог найти ответ.
<?php
$i = 1;
$i+++1+2+3+4;
echo $i;
Эта линия:
$i+++1+2+3+4;
Говорит:
$i
$i
предварительно приращение +1+2+3+4
, но не магазин в результат в любом месте.Отсюда $i == 2
.
Если вы не хотите, чтобы игнорировать, вы должны сохранить результат:
$i = $i+++1+2+3+4;
Все это хорошо. Вы просто забыли назначение, так i
влияет только ++
оператора:
<?php
$i = 1;
$x = $i+++1+2+3+4;
echo "{$i} vs "{$x}";
вернется
2 vs 11
Вы никогда не назначить законченную работу в любом месте:
Эти два функционально эквивалентны:
$i++;
$i = $i + 1;
оба будут увеличиваться $i
1, и сохранить это измененное значение в $i
С $i+++1+2+3+4
вы, по сути выполняя
($i++) + 1 + 2 + 3 + 4
, который
$i = $i + 1;
1 + 2 + 3 + 4; // useless, result not stored anywhere
так Инкремент $i
1, сохраняет что $i
, то другие дополнения. Но поскольку они нигде не спасаются, результат отбрасывается.
, если у вас
php > $i = 1;
php > $i = $i+++1+2+3+4;
^^^^^----add this
php > echo $i;
11
тогда бы работала, как вы ожидали.
$i++
означает добавить 1 в $i
.
и, как и python, значение +1+2+3+4
означает добавление значения $i
pre increment в +1+2+3+4
, но не храните его нигде (так что адрес памяти или что-то в этом роде ...).
, так что вы получаете только $i==2
Спасибо, имеет смысл. – Daan