프로그래밍에서 삼항 연산자(?)는 조건을 평가하고 값을 할당하는 간결한 방법을 제공합니다. 그러나 문자열 연결과 관련된 특정 미묘한 차이로 인해 예기치 않은 동작이 발생할 수 있습니다.
다음 코드 조각을 고려하세요.
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!