ホームページ >バックエンド開発 >PHPチュートリアル >三項演算子と文字列連結が望ましくない結果を生み出すのはなぜですか?
プログラミングにおいて、三項演算子 (?) は、条件を評価して値を割り当てるための簡潔な方法を提供します。ただし、文字列の連結に伴う特定のニュアンスが予期しない動作を引き起こす可能性があります。
次のコード スニペットを考えてみましょう:
<code class="php">$description = 'Paper: ' . ($paperType == 'bond') ? 'Bond' : 'Other';</code>
ここでの目標は、の値に基づいて異なる説明を割り当てることです。 $paperType。 $paperType が「bond」に等しい場合、$description は「Paper: Bond」である必要があります。それ以外の場合は「用紙:その他」となります。
ただし、実際の結果は意図したものと異なります。 「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: ' が評価された三項式に連結され、正しい値が得られます: $paperType が ' の場合、'Paper: Bond'それ以外の場合は「bond」と「Paper: Other」です。
以上が三項演算子と文字列連結が望ましくない結果を生み出すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。