三項演算子と文字列連結が望ましくない結果を生み出すのはなぜですか?

Patricia Arquette
リリース: 2024-10-24 05:12:01
オリジナル
923 人が閲覧しました

Why Do Ternary Operator and String Concatenation Produce Unwanted Results?

三項演算子と文字列連結の動作

プログラミングにおいて、三項演算子 (?) は、条件を評価して値を割り当てるための簡潔な方法を提供します。ただし、文字列の連結に伴う特定のニュアンスが予期しない動作を引き起こす可能性があります。

次のコード スニペットを考えてみましょう:

<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 サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!