새로운 PHP7 null 병합 연산자를 삼항 연산자와 함께 사용할 때 예기치 않은 동작이 발생합니다.PHP null 병합 + 삼항 연산자 이상한 동작
구체적인 상황 (더미 코드)
function a()
{
$a = 1;
$b = 2;
return $b ?? (false)?$a:$b;
}
var_dump(a());
결과는 INT (1).
아무도 나를 설명 할 수 있습니까?
새로운 PHP7 null 병합 연산자를 삼항 연산자와 함께 사용할 때 예기치 않은 동작이 발생합니다.PHP null 병합 + 삼항 연산자 이상한 동작
구체적인 상황 (더미 코드)
function a()
{
$a = 1;
$b = 2;
return $b ?? (false)?$a:$b;
}
var_dump(a());
결과는 INT (1).
아무도 나를 설명 할 수 있습니까?
공백은 PHP가 표현식을 평가하는 방식을 반영하지 않습니다. ??
에는 3 진 표현식보다 higher precedence이 있습니다. 한 $b
이 null
하지 않거나 false
로 평가 $a
입니다
($b ?? false) ? $a : $b;
:
당신은 결과를 얻을.
내가 볼, 당신에게 감사합니다 – Aldos
return $b ?? (false)?$a:$b;
이 먼저 문을 검사는 $b ?? (false)
그 결과 다음 ? $a:$b
에 전달되는 평가; 인 $a
값을 반환
창 ($b) ? $a : $b
:식이된다 위에
$b ?? (false)
수단은, 실제 틱 값이 경우 $b = 2
이후 $b
인 제 not null and isset
값, 수득 int(1)
원래의 진술을 다음과 같이 생각하면이 모든 것이 더 잘 이해 될 것입니다.
반환 우리는 ??
내 자신의 정신 및 향후 코더를 위해서 ?
도 감사합니다, 너무 감사합니다 – Aldos
전에 평가되기 때문에, 난 항상 명시 적으로이 같은 표현식에 괄호를 사용하여 내 코드를 사용하여 추가 괄호를 추가 할 필요가없는
($b ?? (false)) ? $a : $b;
. 나는 나의 의도를 진술하고 선행이나 다른 부작용에 의지하지 않는다. –
그게 좋은 지적이고 나쁜, 감사합니다 – Aldos