최근에 다음과 같은 구절에서 그 내용을 발견했습니다.
$x = 2 && $y = 3; echo (int)$x.':'.(int)$y; 사전>이 코드 조각은 1:3 출력을 생성합니다. 연산자 우선순위 테이블을 살펴보면 논리 연산자 || 및 &&&가 할당 연산자 =보다 우선순위가 높다는 것을 알 수 있습니다. 따라서 첫 번째 표현식은 $x = ($y || 2) = 3;으로 처리되어 $x = (2 && $y) = 3이 되고 최종적으로 $x = false = 3; . 둘째, 할당 연산자는 올바른 순서를 가지므로 인터프리터는 false = 3을 시도해야 하며 이는 명백히 불법입니다. 따라서 내 생각에는 위에서 언급한 코드 조각은 컴파일에 실패하고 구문 분석 또는 런타임 오류가 발생해야 합니다. 하지만 대신에 이 스니펫은 1:3을 생성했습니다. 즉, 통역사가 수행하는 작업은 다음과 같습니다.
<인용문>a) $y=3
b) 2 &&$y
c) $x = (2 && $y)
인용문>연산자 우선순위를 기반으로 하는 대신 왜 이 작업을 수행합니까?
귀하가 제공한 연산자 우선순위 테이블은 별도의 주석으로 명시되어 있습니다.
따라서 실제로 표현식 내의 할당은 하위 표현식으로 처리됩니다. 이 작업이 수행되는 방법과 시기는 문서에 명확하게 명시되어 있지 않으며 단순히 "유사한" 표현이 이러한 방식으로 작동한다고 명시되어 있습니다.