>  기사  >  백엔드 개발  >  삼항 연산자와 문자열 연결이 원하지 않는 결과를 생성하는 이유는 무엇입니까?

삼항 연산자와 문자열 연결이 원하지 않는 결과를 생성하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-24 05:12:01923검색

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'와 같은 올바른 값이 생성됩니다. 본드', 그렇지 않으면 '종이:기타'로 표시됩니다.

위 내용은 삼항 연산자와 문자열 연결이 원하지 않는 결과를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.