Почему $ х = 5; $ Х +++ $ х ++; равняется 11 в PHP? - PullRequest
0 голосов
/ 27 июня 2018

Согласно кодам операций должно быть 12. Я неправильно понял?

number of ops:  8
compiled vars:  !0 = $x
line    #* E I O op                  fetch      ext   return  operands
-------------------------------------------------------------------------
  3     0  E >   EXT_STMT                                                 
        1        ASSIGN                                         !0, 5
  5     2        EXT_STMT                                                 
        3        POST_INC                               ~2      !0
        4        POST_INC                               ~3      !0
        5        ADD                                    ~4      ~2, ~3
        6        ECHO                                           ~4
  7     7      > RETURN                                         1

branch: #  0; line:     3-    7; sop:     0; eop:     7; out1:  -2
path #1: 0,

Редактировать

Также ($ x ++) + ($ x ++); возвращает тот же результат (11). На самом деле это было основной причиной расследования вопроса и кода операции.

Ответы [ 7 ]

0 голосов
/ 27 июня 2018

++ $ x + $ x ++ будет 12

А ++ $ x + ++ $ x будет 13

когда вы используете $ x ++ $ x, вы получаете +1, как только это значение используется, но значение, которое будет использоваться, будет тем, которое оно имеет до приращения, поэтому, когда вы делаете:

$ х = 5; $ Х +++ $ х ++;

$ x +++ $ x ++ равно 11, но $ x будет 7

0 голосов
/ 27 июня 2018

Вы используете оператор постинкремента ($ x ++). Если вы хотите использовать увеличенное значение для сложения, вы должны использовать оператор предварительного увеличения (++ $ x).

Следовательно, если $ x = 5

$x++ + $x++ equals 5+6 = 11
++$x + $x++ equals 6+6 = 12
$x++ + ++$x equals 5+7 = 12
$++x + ++$x equals 6+7 = 13

Тем не менее, во всех случаях х равен 7 после.

0 голосов
/ 27 июня 2018
$x = 5;
echo $x++ + $x++;

печатает 11, так как сначала $ x ++ возвращает 5, а затем после этого увеличивается, второй $ x ++ возвращает 6 и единственное значение увеличивается. Таким образом, фактическое сложение 5 + 6, что дает 11.

0 голосов
/ 27 июня 2018

++ имеет более высокий приоритет, чем оператор +

(x ++) сначала вернет значение x, а затем увеличит его на 1

$x = 2
$x++ // return 2, then increment it to 3

x +++ x ++ оценивается следующим образом

1. Get x value first which is 5
2. Then it will be incremented to 6
3. But first x value will be 5 because (x++) statement will return 5 first then increment the value
4. Then + operator is encountered
5. Next x will have 6 as value not 7 for the same reason (x++) will return the x value first and then increment it
6. So 5+6 is 11
7..At the end, x value will be 7

То же самое относится к ($x++)+($x++)

grouping operator () имеет left to right ассоциативность. Первый ($x++) выполняется первым.

$x = 5
($x++) returns 5 and then increment $x by 1. Same as before. 

тогда последний ($ x ++) выполняется. Возвращает 6, а затем увеличивает $ x до 7

так же 5+6 // 11 возвращается обратно

0 голосов
/ 27 июня 2018

Мне потребовалось несколько чтений, но $x=5; $x++ + $x++; работает так:

В случае $ x ++ он сначала «привыкает», а затем увеличивается:

  • Установите $ x на 5
  • Поместите $ x в стек (то есть 5)
  • Увеличение (++) ($ x теперь равно 6, стек = [ 5 ])
  • Добавить $ x в стек (stack = [5, 6 ], поэтому 5 + 6 -> $ x = 11)
  • Добавление сделано, этот результат 11
  • Инкремент $ x (++) (который больше не используется, но $ x теперь равен 7)

На самом деле, в этом конкретном примере, если бы вы echo $x; он вывел бы 7. Вы никогда не переназначаете значение обратно в $ x, поэтому $ x = 7 (вы увеличили его дважды);

0 голосов
/ 27 июня 2018
$x = 5;
$a = $x++ + $x++;

строка выражения будет выполняться так: 1-е вхождение $x++ в операторе увеличит значение $x на 1, чтобы оно стало 6 и

во 2-м случае, $x будет иметь значение 6;

Итак, $ a = 5 + 6;

итоговый результат $a будет 11.

0 голосов
/ 27 июня 2018

Оператор постинкрементного увеличения переменной, но возвращает ее старое значение.

То есть $x++ эквивалентно:

($temp = $x, $x = $x + 1, $temp)

Когда вы делаете это дважды в выражении, это похоже на:

echo ($temp1 = $x, $x = $x + 1, $temp1) + ($temp2 = $x, $x = $x + 1, $temp2);

Первая часть устанавливает $temp1 = 5 и увеличивает $x до 6.

Вторая часть устанавливает $temp2 = 6 и увеличивает $x до 7.

Затем он делает $temp1 + $temp2 и повторяет результат, который равен 5 + 6 = 11.

...