在程式設計中,三元運算子(?) 提供了一種簡潔的方法來評估條件和賦值。但是,與字串連接相關的某些細微差別可能會導致意外行為。
考慮以下程式碼片段:
<code class="php">$description = 'Paper: ' . ($paperType == 'bond') ? 'Bond' : 'Other';</code>
此處的目標是根據的值分配不同的描述$paperType.如果$paperType 等於“bond”,則$description 應為“Paper :Bond」。否則,應該是「Paper: Other」。
但是,實際結果與預期不同。它不附加“Paper:”前綴,而是僅返回“Bond”或“Other”。
要理解為什麼會發生這種情況,讓我們分解程式碼:
<code class="php">($paperType == 'bond') ? 'Bond' : 'Other'</code>
這個表達式評估條件 $paperType == 'bond'。如果為 true,則傳回「Bond」。如果為 false,則傳回 'Other'。
在原始程式碼中,此表達式直接連接到字串 'Paper: '。
<code class="php">'Paper: ' . (condition ? 'Bond' : 'Other')</code>
出現此問題的原因是字串 'Paper : ' 連接到三元表達式的結果,而不是條件本身。因此,如果 $paperType 等於 'bond',結果是 'Bond',它與一個空字串(由於尾隨冒號)連接,產生 'Bond'。
為了實現預期的行為,字串連接應括在括號中:
<code class="php">$description = 'Paper: ' . (($paperType == 'bond') ? 'Bond' : 'Other');</code>
這可確保字串'Paper: ' 連接到計算的三元表達式,從而產生正確的值: 'Paper: Bond' 如果$paperType 為'否則為“債券”和“紙張:其他”。
以上是為什麼三元運算子和字串連接會產生不需要的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!