비교 연산자(comparison operator)
비교 연산자는 피연산자 사이의 상대적인 크기를 판단하여, 참(true)과 거짓(false)을 반환합니다.
비교 연산자는 모두 두 개의 피연산자를 가지는 이항 연산자이며, 피연산자들의 결합 방향은 왼쪽에서 오른쪽입니다.
비교 연산자 | 설명 |
---|---|
== | 왼쪽의 피연산자와 오른쪽의 피연산자가 같으면 참을 반환함. |
=== | 왼쪽의 피연산자와 오른쪽의 피연산자가 같고, 같은 타입이면 참을 반환함. (PHP 4에서 추가됨) |
!= | 왼쪽의 피연산자와 오른쪽의 피연산자가 같지 않으면 참을 반환함. |
<> | 왼쪽의 피연산자와 오른쪽의 피연산자가 같지 않으면 참을 반환함. |
!== | 왼쪽의 피연산자와 오른쪽의 피연산자가 같지 않거나, 타입이 다르면 참을 반환함. (PHP 4에서 추가됨) |
< | 왼쪽의 피연산자가 오른쪽의 피연산자보다 작으면 참을 반환함. |
<= | 왼쪽의 피연산자가 오른쪽의 피연산자보다 작거나 같으면 참을 반환함. |
> | 왼쪽의 피연산자가 오른쪽의 피연산자보다 크면 참을 반환함. |
>= | 왼쪽의 피연산자가 오른쪽의 피연산자보다 크거나 같으면 참을 반환함. |
!=와 <> 연산자는 정확히 같은 동작을 하며, 연산자의 우선순위에서만 차이가 발생합니다.
다양한 타입의 비교
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
// 불리언 타입과 숫자 0을 비교하므로, 숫자 0은 불리언 false 값으로 변환되어 비교됩니다.
② var_dump("123abc" == 123); // true
//문자열과 숫자를 비교하므로, 숫자로 시작되는 문자열 "123abc"는 숫자 123으로 변환되어 비교됩니다.
③ 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
//배열이랑 다른 타입을 비교하면, 언제나 배열이 크다고 판단됩니다.