簡體   English   中英

PHP在添加和連接時感到困惑

[英]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);

由於您使用語言構造echo您可以使用逗號將添加與連接分開:

echo "sum: " , $a + $b;

按預期工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM