programing

3차 연산자 및 문자열 연결 특이점?

abcjava 2023. 8. 4. 22:33
반응형

3차 연산자 및 문자열 연결 특이점?

안녕하세요. 이 코드가 (적어도 저에게는) 잘못된 결과를 산출하는 이유를 알고 싶습니다.

음, 아마 제가 잘못한 것 같아요.

$description = 'Paper: ' . ($paperType == 'bond') ? 'Bond' : 'Other';

만약 종이가유형은 '본드'이고 설명은 '용지:본드'이며, 종이인 경우유형이 '본드'와 동일하지 않으며 설명은 '용지:'기타'

하지만 제가 이 코드를 실행하면 'Bond' 또는 'Other'라는 결과가 나와 'Paper:'라는 문자열이 어디로 갔는지 궁금하게 됩니다.

$description = 'Paper: ' . ($paperType == 'bond' ? 'Bond' : 'Other');

문자열이 올바른 순서로 문자열에 연결되도록 괄호를 추가해 보십시오.

연산자 우선 순위와 관련이 있습니다.다음을 수행해야 합니다.

$description = 'Paper: ' . (($paperType == 'bond') ? 'Bond' : 'Other');

모두가 해결책을 제시했다고 생각합니다, 예상치 못한 결과가 나온 이유에 기여하고 싶습니다.

먼저 원점과 연산자 평가 방법(왼쪽, 오른쪽, 연관성 등)을 확인할 수 있습니다.

http://php.net/manual/fa/language.operators.precedence.php

이제 우리가 당신의 문장을 분석해보면요.

$paperType = 'bond';
$description = 'Paper:'. ($paperType == 'bond') ? 'Bond': 'Other';
  1. 표를 검토한 결과 괄호가 먼저 평가되고, 그 다음에 '.'(연결)이 평가되며, 마지막에 3진수 연산자 '?'가 평가되므로 이를 다음과 같이 연결할 수 있습니다.
// evaluate the parenthesis ... ($paperType == 'bond')
$description = ('Paper:'. 1)? 'Bond': 'Other';
//result
$description = 'Paper: 1'? 'Bond': 'Other';
  1. 이제 3진 연산자가 있고 문자열이 "참"으로 평가된다는 것을 알고 있습니다.

php 문서 부울로 변환할 때 다음 값은 FALSE로 간주됩니다.

빈 문자열 및 "0" 문자열

$description = true? 'Bond': 'Other';
  1. 마침내.
$description = 'bond';

나는 내가 그 질문을 명확히 했길 바랍니다.인사말.

언급URL : https://stackoverflow.com/questions/1317383/ternary-operator-and-string-concatenation-quirk

반응형