Как мы можем определить приращение и уменьшение в PHP - PullRequest
0 голосов
/ 10 февраля 2012

Пожалуйста, предоставьте мне правильное решение этого сценария с объяснением:

 $a = 5;
 $c = $a-- + $a-- + --$a - --$a;
 echo $c;

Что будет значением $c = 10;Почему?

Ответы [ 4 ]

4 голосов
/ 10 февраля 2012

От прочтения приведенного выше сценария и следующих утверждений до

$var++, $var--  //Use value then apply incremnet, decrement
++$var, --$var  // Increment, decrement then use vakue

вы можете переписать выражение для простоты понимания.

$a = 5;
$c = $a--;   // $c = 5, $a = 4
$c += $a--;  //$c = 9, $a = 3
$c += --$a   // $c = 11, $a = 2 ($a drops to two before use)
$c -= --$a   //$c = 10  $a = 1 ($a drops to one before use);
2 голосов
/ 10 февраля 2012

++ и -- приводят к одному и тому же конечному результату - увеличивая или уменьшая переменную - независимо от того, применяется ли она до или после имени переменной, разница возникает, когда она используется как часть более крупного оператора.* Рассмотрим это:

$a = 5;
$a--;
echo $a; // 4

$a = 5;
--$a;
echo $a; // 4

Итак, вы видите, они дают один и тот же конечный результат - $a уменьшаются на единицу.Я уверен, что это то, что вы ожидали.

Однако:

$a = 5;
echo $a--; // 5
echo $a; // 4

$a = 5;
echo --$a; // 4
echo $a; // 4

В этом примере $a все еще уменьшается после операции, но порядок, в котором происходит уменьшениеи значение используется другое.Для $a-- значение используется до уменьшения, а для --$a значение используется после.

Так для вашего примера кода:

$a = 5;    //  Operations in order of occurence:
$c = $a--  //  $c = 5;          $a = 5 - 1  == 4;
   + $a--  //  $c = 5 + 4 == 9; $a = 4 - 1  == 3;
   + --$a  //  $a = 3 - 1 == 2; $c = 9 + 2  == 11;
   - --$a; //  $a = 2 - 1 == 1; $c = 11 - 1 == 10; 
echo $c;   //  10
1 голос
/ 10 февраля 2012

Выражение $a-- является пост-декрементным, что означает, что сначала возвращается $a, а затем уменьшается $a на единицу. Выражение --$a является предварительным уменьшением, которое сначала уменьшается на $a на единицу, а затем возвращает $a.

Учитывая вышесказанное, это означает $c = 5 + 4 + 2 - 1 = 10.

1 голос
/ 10 февраля 2012
$a = 5 ; // $a = 5
$c = $a-- // $c = 5 $a = 4
+
$a-- // $c = 9 $a = 3
+
--$a // $c = 11 $a = 2
-
--$a // $c = 10 $a = 1
;
echo $c ; // $c = 10
...