Я нашел фрагмент кода (от одного из наших разработчиков), и мне было интересно, почему его вывод равен 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, чтобы сделать его более ясным и устранить дополнительную операцию.