PHP에는 논리곱(AND)을 수행하는 두 가지 연산자, 즉 and와 &&가 존재합니다. 두 연산자 모두 같은 기능을 하지만, 결정적인 차이는 연산자 우선순위(operator precedence)에 있습니다.
&& 연산자의 우선순위가 대입 연산자 =보다 높은 반면, and 연산자의 우선순위는 =보다 낮습니다. 이러한 우선순위 차이 때문에 동일해 보이는 코드도 결과가 달라질 수 있습니다.
예제 1: 'and' 연산자 사용
먼저 and 연산자를 사용한 기본적인 예제를 살펴보겠습니다.
<?php $val1 = 55; $val2 = 65; if ($val1 == 55 and $val2 == 65) echo "Result = True"; else echo "Result = False"; ?>
출력 결과
Result = True
조건 비교문 안에서는 and와 && 모두 의도한 대로 작동합니다.
예제 2: '&&' 연산자 사용
이번에는 && 연산자를 사용한 예제입니다.
<?php $val1 = 110; $val2 = 110; if ($val1 == 110 && $val2 == 110) echo "Result = True"; else echo "Result = False"; ?>
출력 결과
Result = True
단순 조건문에서는 두 연산자의 결과가 동일하게 나타납니다. 그렇다면 실질적인 차이는 어디서 발생할까요?
예제 3: 우선순위 차이가 드러나는 핵심 예제
대입 연산자와 함께 사용할 때 두 연산자의 차이가 명확히 드러납니다.
<?php $bool = TRUE and FALSE; echo ($bool ? 'true' : 'false'), "\n"; $bool = TRUE && FALSE; echo ($bool ? 'true' : 'false'); ?>
출력 결과
true false
결과가 서로 다르게 나온 이유를 살펴보겠습니다.
$bool = TRUE and FALSE;→and의 우선순위가=보다 낮기 때문에 먼저$bool = TRUE가 실행되고, 그 후에$bool and FALSE가 평가됩니다. 따라서$bool에는TRUE가 할당되어true가 출력됩니다.$bool = TRUE && FALSE;→&&의 우선순위가=보다 높기 때문에TRUE && FALSE가 먼저 평가되어FALSE가 되고, 이 결과가$bool에 할당됩니다. 따라서false가 출력됩니다.
결론 및 권장 사항
정리하면 다음과 같습니다.
- 두 연산자는 논리적으로 동일한 역할을 수행하지만, 우선순위가 다릅니다.
&&: 대입 연산자=보다 우선순위가 높음and: 대입 연산자=보다 우선순위가 낮음
일반적으로 코드의 가독성과 예측 가능성을 위해 대부분의 PHP 개발자는 &&와 || 사용을 권장합니다. and, or는 특수한 경우(예: 오류 처리 시 or die())를 제외하고는 의도치 않은 버그를 유발할 수 있으므로 주의해서 사용해야 합니다.