Почему $ a + ++ $ a == 2? - PullRequest
       36

Почему $ a + ++ $ a == 2?

65 голосов
/ 15 марта 2012

Если я попробую это:

$a = 0;    
echo $a + ++$a, PHP_EOL;
echo $a;

Я получаю этот вывод:

2
1

Демо: http://codepad.org/ncVuJtJu

Почему это?

Я ожидаю получить это как вывод:

1
1

Мое понимание:

$a = 0;                    // a === 0    
echo $a + ++$a, PHP_EOL;   // (0) + (0+1) === 1
echo $a;                   // a === 1

Но почему это не выход?

Ответы [ 13 ]

0 голосов
/ 02 августа 2012

Все операторы выполняются справа налево. Таким образом, значение сначала увеличивается, чем значение вашей переменной = 1, поэтому 1 + 1 = 2

0 голосов
/ 15 марта 2012

Как упоминалось ранее, есть разница в x ++ и ++ x. Вы можете интерпретировать это так, как

x++;

с шагом после точки с запятой

и

++x;

приращения при оценке выражения

Так что, похоже, ваше выражение оценивается справа налево

echo $l + ++$l;
  1. Получите $ l: $ l = 0
  2. Применить ++: ++ $ l = 1
  3. Получите $ l: $ l = 1
  4. Применить +: $ l + $ l = 1 + 1 = 2
0 голосов
/ 15 марта 2012

Первая очевидная часть состоит в том, что ++ имеет более высокий приоритет, чем +.

Вторая часть заключается в том, что механизм php не сохраняет значения из первого операнда в другую анонимную переменную. Так что $l + ++$l не является эквивалентом для

$a = $l;
$b = ++$l;
return $a + $b;
...