PHP 문서에 따르면, 널 병합 연산자 ??
잘 연관이의 오른쪽 연관성, 즉PHP의 널 (null) 병합 연산자
$a ?? $b ?? $c
이
$a ?? ($b ?? $c)
이것의 의미는 무엇인가에 해당? 개발자가 왼쪽 연관성 또는 오른쪽 연관성이라는 점에서 차이점이 있습니까?
function f(string $a) : string {
echo "f($a)\n";
return $a;
}
var_dump(f("a") ?? f("b") ?? f("c") ?? f("d"));
echo "===\n";
var_dump(((f("a") ?? f("b")) ?? f("c")) ?? f("d"));
출력 :
왼쪽 피연산자가 내 테스트에 따라 null가 아닌 경우 오른쪽 피연산자는 평가되지 않기 때문에 덜 함수를 호출합니다 생각하는 사람들에게, 이것은 사실이 아니다
f(a)
string(1) "a"
===
f(a)
string(1) "a"
'$의 A','$의 b'와'$의 c'는 다음이 완전히 다른 실행으로 이어질 것입니다 기능이 될 경우이 남아있는 경우 또는 오른쪽 연관을 간단한 예제로 사용하십시오. '?? '에 다른 연산자를 사용하면 코드가 완전히 다른'연관성 '에 따라 같은 결과가 발생합니다. – Rizier123
@ Rizier123 지금 하시겠습니까? https : // 3v4l.org/PvvSr – deceze
FWIW, 왼쪽 연관 '??'연산자가 누적 된 '??'연산자와 조합하여 다른 결과를 생성하는 경우를 생각할 수 없습니다. 내부 단락과 관련이있는 것으로 보인다. 즉 왼쪽 연관 '??'연산자는 가능한 한 빨리 반환하는 대신 모든 누적 표현식 (피연산자가 아닌 경우에도)을 항상 평가합니다. 당신은 다른 통신 수와 그것을 결합하는 다른 행동을 찾아 낼지도 모른다. – deceze