[英]PHP is confused when adding and concatenating
我有以下代碼:
<?php
$a = 1;
$b = 2;
echo "sum: " . $a + $b;
echo "sum: " . ($a + $b);
?>
當我執行我的代碼時,我得到:
2
sum: 3
為什么在第一個回顯中無法打印字符串"sum:"
? 將加法括在括號中似乎沒問題。
這種奇怪的行為是否有記錄?
無論是運營商加入+
運營商和串聯.
運算符具有相同的運算符優先級,但由於它們是左關聯的,因此它們的計算方式如下:
echo (("sum:" . $a) + $b);
echo ("sum:" . ($a + $b));
因此,您的第一行首先進行連接並以:
"sum: 1" + 2
(現在因為這是一個數字上下文,你的字符串被轉換為一個整數,因此你最終得到0 + 2
,然后給你結果2
。)
如果您查看列出PHP 運算符優先級的頁面,您會看到連接運算符.
和加法運算符+
具有相同的優先級,具有左結合性。 這意味着操作是從左到右完成的,正如代碼所示。 讓我們來看看:
$output = "sum: " . $a;
echo $output, "\n";
$output = $output + $b;
echo $output, "\n";
這給出了以下輸出:
sum: 1
2
連接有效,但您隨后嘗試將字符串sum: 1
添加到數字2
。 不以數字開頭的字符串的計算結果為0
,因此這等效於0 + 2
,結果為2
。
正如您在問題中所建議的那樣,解決方案是將加法運算括在括號中,以便它們一起執行,然后連接這些運算的結果。
echo "sum: " . ($a + $b);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.