2012-02-10 47 views
0

請給我提供這個腳本的解釋與妥善解決:我們如何確定PHP遞增和遞減

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

會是怎樣的$c = 10價值;爲什麼?

+2

你是什麼意思的「解決方案」? – Bojangles 2012-02-10 15:58:49

+0

其實我只是想確認一下,會先執行什麼。預先減量或後減量... – PPS 2012-02-10 15:59:49

+1

你爲什麼不執行它? – jeroen 2012-02-10 16:00:22

回答

2

++--會產生相同的最終結果 - 遞增或遞減變量 - 無論是在變量名之後應用,在用作較大語句的一部分時會出現差異。

考慮一下:

$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 
+0

再次,人。你正在回答錯誤!第一個 - $ a給出2不是3 – dmitry 2012-02-10 16:18:27

+0

@ confused-demon我知道我剛剛實現和編輯。 – DaveRandom 2012-02-10 16:19:17

+0

這個答案是錯誤的。現在尋找正確答案的鏈接。 – DaveRandom 2012-08-30 08:47:47

1
$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 
1

表達$a--是後遞減,這意味着它第一返回$a然後減一$a。表達式--$a是預先遞減的,其首先將$a遞減1,然後返回$a

考慮到上述情況,這意味着$c = 5 + 4 + 2 - 1 = 10

4

通過閱讀上面的腳本和下面來斷言

$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);