참고 중첩 된 조건 연산자를 사용하는 경우, 당신은 괄호를 사용할 수 있습니다 가능한 문제를 피하기 위해!
PHP가 최소한 Javascript 또는 C #과 동일한 방식으로 작동하지 않는 것 같습니다.
$score = 15;
$age = 5;
// The following will return "Exceptional"
echo 'Your score is: ' . ($score > 10 ? ($age > 10 ? 'Average' : 'Exceptional') : ($age > 10 ? 'Horrible' : 'Average'));
// The following will return "Horrible"
echo 'Your score is: ' . ($score > 10 ? $age > 10 ? 'Average' : 'Exceptional' : $age > 10 ? 'Horrible' : 'Average');
Javascript와 C #의 동일한 코드는 두 경우 모두 "Exceptional"을 반환합니다.
두 번째 경우, PHP가하는 일은 (또는 적어도 내가 이해하는 것입니다) :
- 이다
$score > 10
? 예
- 이다
$age > 10
? 아니요, 따라서 현재 $age > 10 ? 'Average' : 'Exceptional'
는 '예외'를 반환합니다.
- 그런 다음 전체 문을 중지하고 'Exceptional'을 반환하는 대신 다음 문을 계속 평가합니다.
- 다음 문장은
'Exceptional' ? 'Horrible' : 'Average'
'Exceptional'이 진실이므로 'Horrible'을 반환합니다.
문서에서 : http://php.net/manual/en/language.operators.comparison.php
삼항 표현식을 "스택"하지 않는 것이 좋습니다. 단일 명령문 내에서 둘 이상의 삼항 연산자를 사용할 때 PHP의 동작은 명확하지 않습니다.