PHP 비교 연산자 == 와 === 차이점

값을 비교하는 경우 사용하는 비교 연산자 ==가 있습니다.

값이 같은지 확인하는 사용하는 연산자입니다.

비교 연산자 중 === 를 사용하는 경우도 있습니다.

2개와 3개 같아 보이지만 결과 값이 다른 경우가 발생합니다.

==와 ===는 어떻게 다른지 확인해 보겠습니다.

연산자 내용
$a == $b데이터 타입을 변환후 $a가 $b와 같은지 판단. 같으면 TRUE를 반환.
$a === $b$a와 $b가 값이 같고, 데이터 타입도 같으면 TRUE를 반환.

 

샘플을 보면서 확인을 해보겠습니다.

<?php
$a = 120;
$b = "120abcer1ere";

if($a == $b) {
	echo "true";
} else {
	echo "false";
}

 

결과

true

 

비교 연산자를 사용해 값이 같은지 판단을 하는 샘플입니다.

예상외에 값이 출력되었습니다.

이유는 비교연산자 == 설명에서 데이터 타입을 변환 후 값이 같은지 비교한다고 했습니다.

PHP에서 변수를 선언할 때 int, String 등 데이터 타입을 지정하지 않아도 문제는 없습니다.

PHP에서는 자동으로 데이터 타입을 설정해 주기 때문입니다.

비교연산자 ==를 사용할 때는 자동으로 데이터 타입을 변환하는 캐스터가 발생합니다.

비교하는 두 값의 데이터 타입이 다르면 자동으로 형을 변환해 맞추게 됩니다.

샘플에서는 비교하는 값이 들어있는 변수 b를 비교 대상인 변수 a의 데이터 타입에 맞춰서 변환이 되었습니다.

변수 a에는 숫자 형태인 int타입이 들어있기 때문에 변수 b는 문자열에서 int형으로 타입이 변환되었습니다.

변수 b를 문자열에서 int형으로 변환하면 값이 어떻게 변하는지 확인해 보겠습니다.

<?php
$b = "120abcer1ere";

var_dump($b);
var_dump((int)$b);

 

결과

string(12) "120abcer1ere" 
int(120)

 

데이터 타입이 int형으로 변하면서 값이 문자열은 없어지고 값에는 120만 남았습니다.

변수 a의 값과 같기 때문에 결과값으로 TRUE를 반환했습니다.

비교 연산자 ===는 데이터 타입을 변환하지 않습니다.

샘플을 보겠습니다.

<?php
$a = 120;
$b = "120abcer1ere";

if($a === $b) {
	echo "true";
} else {
	echo "false";
}

 

결과

false

 

반환값으로 false 받았습니다.

비교 연산자 ===로 비교한 결과 정확한 결과를 받았습니다.

비교 연산자 ===는 데이터 타입을 변환하지 않습니다.

그리고 값이 같은지만 판단하는 것이 아니고 데이터 타입도 일치해야지 TRUE를 반환합니다.

<?php
$a = 120;
$b = "120";

if($a === $b) {
	echo "true";
} else {
	echo "false";
}

 

결과

false

 

만약에 변수 a와 b의 값은 같지만 데이터 타입이 다르기 때문에 false를 반환했습니다.

PHP에서는 데이터 타입이 달라도 두 값을 비교하는데 문제가 없는 경우도 있지만 경우에 따라서는 정확한 비교가 안 되는 경우도 있습니다.

비교하는 데이터 타입을 먼저 확인하고 == 또는 === 연산자를 사용하도록 해야 합니다.

댓글