Я нашел фрагмент кода (от одного из наших разработчиков), и мне было интересно, почему его вывод равен 2?
<?php
$a = 1;
$a = $a-- +1;
echo $a;
спасибо
Я нашел фрагмент кода (от одного из наших разработчиков), и мне было интересно, почему его вывод равен 2?
<?php
$a = 1;
$a = $a-- +1;
echo $a;
спасибо
Я объясню свое объяснение вихрем. Мы говорим о переменной, ссылающейся на некоторое значение в системе.
Итак, когда вы определяете $a = 1
, вы указываете переменную $a
на значение 1
, которое где-то в памяти.
Во второй строке вы делаете $a = $a-- + 1
, чтобы создать новое значение и установить значение $a
. $a--
извлекает значение исходного $a
, которое 1
и добавляет 1
, чтобы сделать 2
и создает это значение где-то еще в памяти. Итак, теперь у вас есть переменная $a
, которая указывает на 2
и какое-то другое значение 1
в памяти, которая по порядку уменьшена до 0
, но ничего не указывает на нее больше, поэтому кому это нужно.
Затем вы эхо $a
, который указывает на ваше значение 2
.
Изменить: Страница тестирования
$a-- уменьшает значение после выполнения строки. Чтобы получить ответ 1, вы измените его на - $a
<?php
$a = 1;
$a = --$a +1; // Decrement line
echo $a;
?>
Чтобы уточнить другие ответы, что вы делаете в этой строке:
$a = $a-- +1;
В основном, когда PHP оценивает $a--, он фактически возвращает значение $a, а затем выполняет операцию по его декременту.
$a = 1;
echo $a--; //outputs 1;
echo $a; //outputs 0;
Когда вы запустите этот код, вы увидите, что число уменьшается только после того, как оно было возвращено. Поэтому, используя эту логику, немного более понятно, почему
echo $a-- + 1;
выводит 2 вместо 1.
Возможно, лучший способ, возможно, более ясный:
$a = $a -1 + 1
$a = 1; /* $a is 1 */
$a = ($a--) /* returns 1 and decrements the copy of $a */ + 1 /* 1 + 1 = 2 */;
echo $a; /* 2 */
Вышеупомянутое эквивалентно чем-то вроде:
$a = 1; /* $a is 1 */
$temp = $a + 1; /* 1 ($a) + 1 = 2 */
$a = $a - 1; /* decrements $a */
$a = $temp; /* assigns the result of the above operation to $a */
echo $a;
Это на самом деле в значительной степени то, что PHP переводит, что за кулисами. Таким образом, $a--
не является такой полезной операцией, так как $a
все равно будет перезаписана. Лучше просто замените это на $a - 1
, чтобы сделать его более ясным и устранить дополнительную операцию.