看了php運算子優先級, 能看懂手冊上面的例子, 但這個就有點看不懂了
<code> echo "1+5". 1+5;// 6 echo "1+5". 5+1;// 2 echo "5+1". 5+1;// 6 echo "5+1". 1+5;// 10</code>
看了php運算子優先級, 能看懂手冊上面的例子, 但這個就有點看不懂了
<code> echo "1+5". 1+5;// 6 echo "1+5". 5+1;// 2 echo "5+1". 5+1;// 6 echo "5+1". 1+5;// 10</code>
參考php.net的說明。
我的翻譯(比較爛)
點運算子和
+
,-
具有相同的優先權, 混合運用可以產生意想不到的效果。
如
<code class="php">$var = 3; echo "Result: " . $var + 3; </code>
以上結果輸出3, 而不是期望結果6
因為點運算子和+
, -
有相同的優先權, 所有上述運算"Result: " . $var + 3;
會先計算字串Result
和變數$var得到
Resuklt3
Resuklt3和數字
3的結果, 而非空非數字的字串和整數計算時都會轉換為0, 故得起結果為3
echo "5+1". 1+5; 這個也一樣, 先計算
"5+1". 1得到一個字串
5+11,(注意這是字串), 在和數字
5作加法運算, 字串
5+11轉換為數字= 5, 再加上
5結果為
10
很簡答呀,四個例子就說明一個問題,字串連接符
.的優先權比運算子
+高。
先普及一下,在PHP中如果進行加法運算的變數不是數字類型的,會先轉換成數字類型,而"1+15"這個字串會轉換成數字1。
那這幾項的結果就很明顯了:
<code>"1+5" . 1 + 5 = "1+15" + 5 = 1 + 5 = 6 "1+5" . 5 + 1 = "1+51" + 1 = 1 + 1 = 2 "5+1" . 5 + 1 = "5+15" + 1 = 5 + 1 = 6 "5+1" . 1 + 5 = "5+11" + 5 = 5 + 5 = 10</code>
補充下:
字串連接符 . 和算術運算子 +- 的優先權是一樣的,同級。結合方向是左,即由左往右計算。 refer link
所以會先進行字串連接,再進行加運算。