..

Search

13) 비교 연산자

비교 연산자


비교 연산자(comparison operator)

비교 연산자는 피연산자 사이의 상대적인 크기를 판단하여, 참(true)과 거짓(false)을 반환합니다.

비교 연산자는 모두 두 개의 피연산자를 가지는 이항 연산자이며, 피연산자들의 결합 방향은 왼쪽에서 오른쪽입니다.

비교 연산자 설명
== 왼쪽의 피연산자와 오른쪽의 피연산자가 같으면 참을 반환함.
=== 왼쪽의 피연산자와 오른쪽의 피연산자가 같고, 같은 타입이면 참을 반환함. (PHP 4에서 추가됨)
!= 왼쪽의 피연산자와 오른쪽의 피연산자가 같지 않으면 참을 반환함.
<> 왼쪽의 피연산자와 오른쪽의 피연산자가 같지 않으면 참을 반환함.
!== 왼쪽의 피연산자와 오른쪽의 피연산자가 같지 않거나, 타입이 다르면 참을 반환함. (PHP 4에서 추가됨)
< 왼쪽의 피연산자가 오른쪽의 피연산자보다 작으면 참을 반환함.
<= 왼쪽의 피연산자가 오른쪽의 피연산자보다 작거나 같으면 참을 반환함.
> 왼쪽의 피연산자가 오른쪽의 피연산자보다 크면 참을 반환함.
>= 왼쪽의 피연산자가 오른쪽의 피연산자보다 크거나 같으면 참을 반환함.

 

!=와 <> 연산자는 정확히 같은 동작을 하며, 연산자의 우선순위에서만 차이가 발생합니다.

 

예제

$num_01 = 3;
$num_02 = 3.0;
$num_03 = 3;


var_dump($num_01 == $num_02);  // true

var_dump($num_01 === $num_02); // false
var_dump($num_01 != $num_03);  // false

코딩연습 ▶

 

위의 예제에서 변수 $num_01과 $num_02의 값은 3으로 서로 같지만, 타입은 각각 정수와 실수로 서로 다릅니다.

따라서 동등 연산자(==, equal)와 일치 연산자(===, strict equal)의 결과가 다르게 반환됩니다.


다양한 타입의 비교

PHP에서는 다양한 타입의 값을 서로 비교해야 할 때 다음 규칙에 따라 비교합니다.

피연산자1 피연산자2 비교 규칙
bool, null 모두 둘 다 불리언으로 변환한 후 비교함. (false < true)
string,
resource,
integer, float
string,
resource,
integer, float
숫자로 시작하는 문자열과 리소스는 숫자로 변환한 후 비교함.
object object 내장 클래스는 자신의 비교 함수를 정의할 수 있으나, 다른 클래스끼리 비교할 수는 없음.
array array

배열끼리의 비교는 같은 키를 가지는 값을 서로 비교함.

이때 피연산자1 배열의 키가 피연산자2 배열에 존재하지 않으면 비교할 수 없으며, 배열 요소의 수가 적은 쪽이 작은 거로 판단됨.

array 모두 배열이 항상 큰 거로 판단됨.
object 모두 객체가 항상 큰 거로 판단됨.

 

예제

① var_dump(0 < true);           // true

② var_dump("123abc" == 123);    // true

③ var_dump("123abc" === 123);   // false

 

$arr_01 = array("a" => 10);

$arr_02 = array("a" => 5);

$arr_03 = array("a" => 5, "c" => 7);

 

④ var_dump($arr_01 >= $arr_02); // true

⑤ var_dump($arr_01 >= $arr_03); // false

⑥ var_dump("문자열" < $arr_01); // true

코딩연습 ▶

 

위 예제의 ①번 라인에서는 불리언 타입과 숫자 0을 비교하므로, 숫자 0은 불리언 false 값으로 변환되어 비교됩니다.

②번 라인에서는 문자열과 숫자를 비교하므로, 숫자로 시작되는 문자열 "123abc"는 숫자 123으로 변환되어 비교됩니다.

이때 만약 문자열이 위의 예제처럼 숫자가 아닌 영문자나 언더스코어(_)로 시작하면, 숫자 0으로 변환되어 비교될 것입니다.

하지만 ③번 라인에서 알 수 있듯이 문자열이 숫자로 변환되어 비교된다고 해도 해당 타입까지 변하는 것은 아닙니다.

 

위 예제의 ④번 라인에서는 배열끼리 비교하므로, 배열의 길이가 같은 경우에는 같은 키를 가지는 값을 서로 비교합니다.

하지만 ⑤번 라인처럼 배열의 길이가 다른 경우에는 배열 요소의 수가 적은 쪽이 작다고 판단됩니다.

⑥번 라인에서처럼 배열이랑 다른 타입을 비교하면, 언제나 배열이 크다고 판단됩니다.


연습문제