Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP 연산자 우선순위 완벽 정리

소개

연산자 우선순위(operator precedence)는 하나의 표현식 안에서 여러 연산자가 어떤 순서로 실행되는지를 결정하는 규칙입니다. 예를 들어 2+6/3이라는 식에서는 나눗셈 6/3이 먼저 계산되고, 그다음에 덧셈 2+2가 수행됩니다. 이는 나눗셈 연산자 /가 덧셈 연산자 +보다 더 높은 우선순위를 갖기 때문입니다.

만약 특정 연산자를 다른 연산자보다 먼저 실행되도록 강제하고 싶다면 괄호(parentheses)를 사용해야 합니다. 예를 들어 (2+6)/3처럼 작성하면 덧셈이 먼저 수행된 후 나눗셈이 실행됩니다.

우선순위가 같은 경우: 결합 방향(Associativity)

일부 연산자들은 서로 같은 수준의 우선순위를 가질 수 있습니다. 이 경우에는 결합 방향(associativity), 즉 왼쪽에서 오른쪽으로 평가하는지(left) 아니면 오른쪽에서 왼쪽으로 평가하는지(right)에 따라 연산 순서가 결정됩니다.

예를 들어 산술 연산자는 대부분 왼쪽 결합이므로 5-3-2(5-3)-2 = 0으로 계산됩니다. 반면 거듭제곱 연산자 **는 오른쪽 결합이므로 2**3**22**(3**2) = 512로 평가됩니다.

또한 같은 우선순위 수준을 가지면서도 비결합(non-associative)으로 지정된 연산자들은 서로 인접해서 사용할 수 없습니다. 이런 경우 코드에 혼란을 줄 수 있으므로 괄호를 사용해 의도를 명확히 하는 것이 좋습니다.

PHP 연산자 우선순위 표

아래 표는 PHP의 주요 연산자들을 우선순위가 높은 순서부터 낮은 순서대로 정리한 것입니다. 위쪽에 있을수록 먼저 실행됩니다.

연산자용도
clone new객체 복제(clone) 및 인스턴스 생성(new)
**거듭제곱(exponentiation)
++ --증가/감소(increment/decrement)
~ (int) (float) (string) (array) (object) (bool)형 변환(casting)
instanceof타입 검사(types)
!논리 NOT
* /곱셈/나눗셈
%나머지(modulo)
+ - .산술 연산 및 문자열 연결
<< >>비트 시프트(bitwise shift)
< <= > >=비교(comparison)
== != === !== <> <=>비교(comparison)
&비트 AND / 참조(reference)
^비트 XOR
|비트 OR
&&논리 AND
||논리 OR
??null 병합(null coalescing)
? :삼항 연산자(ternary)
= += -= *= **= /= .= %= &= |= ^= <<= >>= ??=대입 연산자(assignment)
yield fromyield from
yieldyield
printprint
and논리 AND
xor논리 배타적 OR
or논리 OR

주의할 점

특히 and, or, xor 같은 단어 형태의 논리 연산자는 &&, ||보다 우선순위가 훨씬 낮고, 대입 연산자(=)보다도 낮습니다. 따라서 $result = true and false;와 같은 코드는 의도와 달리 $resulttrue가 대입되는 결과를 낳을 수 있습니다. 실무에서는 가능한 한 기호 형태의 논리 연산자(&&, ||)를 사용하고, 복잡한 표현식에는 괄호를 활용해 우선순위를 명확하게 드러내는 것이 바람직합니다.