Dalam pengaturcaraan, operator ternary (?) menawarkan cara ringkas untuk menilai keadaan dan menetapkan nilai. Walau bagaimanapun, nuansa tertentu bersama-sama dengan penggabungan rentetan boleh membawa kepada tingkah laku yang tidak dijangka.
Pertimbangkan coretan kod berikut:
<code class="php">$description = 'Paper: ' . ($paperType == 'bond') ? 'Bond' : 'Other';</code>
Matlamat di sini adalah untuk menetapkan perihalan berbeza berdasarkan nilai $paperType. Jika $paperType sama dengan "bon", $description hendaklah "Paper: Bond." Jika tidak, ia mestilah "Kertas: Lain-lain."
Walau bagaimanapun, hasil sebenar berbeza daripada yang dimaksudkan. Daripada menambahkan awalan "Kertas: ", ia hanya mengembalikan "Ikatan" atau "Lain-lain."
Untuk memahami sebab ini berlaku, mari kita pecahkan kod:
<code class="php">($paperType == 'bond') ? 'Bond' : 'Other'</code>
Ungkapan ini menilai keadaan $paperType == 'bond'. Jika benar, ia mengembalikan 'Bond.' Jika palsu, ia mengembalikan 'Lain-lain.'
Dalam kod asal, ungkapan ini digabungkan terus ke rentetan 'Paper: '.
<code class="php">'Paper: ' . (condition ? 'Bond' : 'Other')</code>
Isu timbul kerana rentetan 'Paper : ' digabungkan dengan hasil ungkapan ternary, bukan keadaan itu sendiri. Jadi, jika $paperType menyamai 'bon,' hasilnya ialah 'Bond,' yang digabungkan dengan rentetan kosong (disebabkan kolon mengekor), menghasilkan 'Bond.'
Untuk mencapai kelakuan yang dimaksudkan, penggabungan rentetan hendaklah disertakan dalam kurungan:
<code class="php">$description = 'Paper: ' . (($paperType == 'bond') ? 'Bond' : 'Other');</code>
Ini memastikan rentetan 'Paper: ' digabungkan dengan ungkapan ternary yang dinilai, menghasilkan nilai yang betul: 'Paper: Bond' jika $paperType ialah ' bon' dan 'Kertas: Lain-lain' sebaliknya.
Atas ialah kandungan terperinci Mengapa Operator Ternary dan Penggabungan Rentetan Menghasilkan Keputusan yang Tidak Diingini?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!