특이한 삼항 연산 : 두 개의 인쇄내가 삼항 연산자의 사용이 작업을 수행하도록 요청 받았다
$test='one';
echo $test == 'one' ? 'one' : $test == 'two' ? 'two' : 'three';
는 (PHP를 사용하여 확인).
나는 이것에 대한 논리가 아직 확실하지 않습니다. 제발, 아무도 나에게 이것에 대한 논리를 말할 수 있을까?
특이한 삼항 연산 : 두 개의 인쇄내가 삼항 연산자의 사용이 작업을 수행하도록 요청 받았다
$test='one';
echo $test == 'one' ? 'one' : $test == 'two' ? 'two' : 'three';
는 (PHP를 사용하여 확인).
나는 이것에 대한 논리가 아직 확실하지 않습니다. 제발, 아무도 나에게 이것에 대한 논리를 말할 수 있을까?
음을의? 과 :
echo ($test == 'one' ? 'one' : $test == 'two') ? 'two' : 'three';
먼저 $test == 'one'
true를 반환, 그래서 첫 번째 괄호는 '하나'값이 : PHP 차례로 각 비트를 평가 왼쪽에서 오른쪽으로 구문 분석 할 수 있도록, 같은 우선 순위가 있습니다. 이제 두 번째 원은 다음과 같이 평가 :
'one' /*returned by first ternary*/ ? 'two' : 'three'
'한'은 (비어 있지 않은 문자열) 사실, 그래서 '이'는 최종 결과입니다.
PHP의 documentation는 말한다 :
참고 : 당신 피하기는 삼항 표현을 "스태킹"하는 것이 좋습니다. 하나의 구문에서 하나를 초과하는 삼항 연산자를 사용하여 PHP의 동작은 비 명백하다 :
는예 # 3 명확하지 않은 삼항 행동
<?php // on first glance, the following appears to output 'true' echo (true?'true':false?'t':'f'); // however, the actual output of the above is 't' // this is because ternary expressions are evaluated from left to right // the following is a more obvious version of the same code as above echo ((true ? 'true' : false) ? 't' : 'f'); // here, you can see that the first expression is evaluated to 'true', which // in turn evaluates to (bool)true, thus returning the true branch of the // second ternary expression. ?>
당신이 허위 진술 주위에 괄호를 넣어 경우, 그것은 인쇄 one
:
echo $test == 'one' ? 'one' : ($test == 'two' ? 'two' : 'three');
중첩 된 삼항 연산은 총체적입니다. 위의 설명은 그 이유를 보여줍니다. 당신은 괄호를 사용하는 경우
is $test == 'one'
if TRUE then echo 'one'
else is $test == 'two'
if TRUE then echo 'two'
else echo three
나는 올바른 길을 가고 있다고 생각하지만 가장 좋은 설명을 가지고 있다고 생각한다. 'one'을 출력하지 않기 때문에 아직 더하지 않습니다. –
Filix Kling의 설명은 왜 괄호가 필요한지 이해가되지 않지만 그 질문에 대답합니다. –
가 제대로 작동 : 인터프리터에,
<?
$test='one';
echo $test == 'one' ? 'one' : ($test == 'two' ? 'two' : 'three');
내가 100 %하지만 괄호없이 그것을 이해하지 못하고, 문
기본적으로이 논리입니다 다음과 같이해야합니다
echo ($test == 'one' ? 'one' : $test == 'two') ? 'two' : 'three';
첫 번째 조건의 결과가 결과로 반환 될 것으로 보인다 전체 삼항 연산의
echo ($test == 'one' ? 'one' : $test == 'two') ? 'two' : 'three';
($ 테스트 == '하나' '하나': : $ 테스트 == '두') 그래서, 비 - 제로/null의 '
나는이 다음과 같이 평가하고 있다고 생각 두 사람은 '논리적 출력
당신이 제대로 작동하려면이며, 쓰기 :
echo $test == 'one' ? 'one' : ($test == 'two' ? 'two' : 'three');
은 기본적으로 인터프리터는 그래서, 왼쪽에서 오른쪽으로이 식을 계산 :
echo $test == 'one' ? 'one' : $test == 'two' ? 'two' : 'three';
이
echo ($test == 'one' ? 'one' : $test == 'two') ? 'two' : 'three';
로 해석됩니다 그리고 paratheses의 표현은 모두 '하나'와 '이 있기 때문에, true로 평가 '은 null/o/다른 형태의 false가 아닙니다. 그것과 같을 것이다 그래서 만약 :
echo $test == 'one' ? FALSE : $test == 'two' ? 'two' : 'three';
이 세 가지를 인쇄 할 것이다. 문제가 없도록하려면 3 진 연산자를 결합하는 것을 잊어서 더 복잡한 논리를 위해 보통 ifs/switch를 사용하거나 인터프리터가 논리를 이해하고 대괄호를 사용하고 표준 LTR 방식으로 검사를 수행하지 않아야합니다 :
echo $test == 'one' ? 'one' : ($test == 'two' ? 'two' : ($test == 'three' ? 'three' : 'four'));
//etc... It's not the most understandable code...
//You better use:
if($test == 'one')
echo 'one';
else { //or elseif()
...
}
//Or:
switch($test) {
case 'one':
echo 'one';
break;
case 'two':
echo 'two';
break;
//and so on...
}
정확하게, 나는 그것을 게시하려고했는데, PHP 문서에서 발견했습니다. :) –
삼항 연산자는 당신이 정말로 그래서 외관의 순서대로 실행됩니다 :
이echo ($test == 'one' ? 'one' : $test == 'two') ? 'two' : 'three';
... 내 눈이 ... 불타는 내 아 .... 그것은 눈에 보이지 않는 수 없습니다 ... –
그것은이다 그렇게 나쁘지 않다. 다른 언어에서는 이것이 관용구가됩니다. PHP에서 잘못 선택된 연산자 결합 덕택에 함정입니다. – bobince
@bobince u는 다른 언어로 이것을 시도 했습니까? 아니면이 – nik