PHP에는 외형이 비슷하지만 동작 방식이 완전히 다른 두 가지 OR 연산자가 있습니다. 바로 비트 단위로 동작하는 |(비트 OR) 연산자와 논리 판단에 사용되는 ||(논리 OR) 연산자입니다. 두 연산자의 차이를 정확히 이해하면 조건문과 비트 연산에서 발생할 수 있는 오류를 예방할 수 있습니다.
'|' 비트 OR(Bitwise OR) 연산자
| 연산자는 비트 단위 OR 연산자입니다. 두 숫자를 이진수로 변환한 뒤, 대응하는 각 비트를 서로 비교하여 하나라도 1이면 결과 비트를 1로 설정합니다. 주로 플래그(flag) 처리나 권한 비트 계산처럼 개별 비트를 다루어야 할 때 사용됩니다.
'||' 논리 OR(Logical OR) 연산자
|| 연산자는 논리 OR 연산자입니다. 비트 단위가 아니라 피연산자 전체를 하나의 값으로 취급하여 참(true)/거짓(false)을 판단합니다. 두 피연산자 중 하나라도 true로 평가되면 전체 결과는 true(1)가 됩니다. if 문 같은 조건식에서 주로 사용됩니다.
예제 코드
다음 예제는 | 연산자와 || 연산자의 실제 사용법과 결과 차이를 보여줍니다.
<!DOCTYPE html>
<html>
<head>
<title>PHP Example</title>
</head>
<body>
<?php
$x = 1; // 0001
$y = 2; // 0010
print('$x | $y = ');
echo $x | $y;
print("<br/>");
print('$x || $y = ');
echo $x || $y;
?>
</body>
</html>
실행 결과
$x | $y = 3 $x || $y = 1
결과 분석
$x = 1은 이진수로 0001, $y = 2는 이진수로 0010입니다.
비트 OR 연산($x | $y)의 경우, 각 자리의 비트를 비교하여 0001 OR 0010 = 0011, 즉 십진수 3이 됩니다.
반면 논리 OR 연산($x || $y)은 숫자 1과 2를 모두 0이 아닌 값, 즉 true로 간주합니다. 따라서 true OR true의 결과인 true가 반환되며, PHP에서 true는 1로 출력됩니다.
정리
|: 피연산자의 개별 비트를 하나씩 비교하여 새로운 숫자 값을 생성합니다.||: 피연산자 전체를 참/거짓으로만 평가하며, 결과는 항상 불리언 값(true/false)입니다.- 조건 판단이 목적이라면
||를, 비트 조작이 목적이라면|를 사용해야 합니다.