PHP에서 변수를 다룰 때 isset()과 !empty()는 자주 혼동되는 함수입니다. 두 함수 모두 변수의 상태를 검사하지만, 판단 기준이 서로 다르기 때문에 상황에 맞게 선택하는 것이 중요합니다. 이 글에서는 두 함수의 동작 방식을 예제와 함께 살펴보고 차이점을 명확하게 정리해 드립니다.
isset() 함수란?
isset()은 변수가 설정(Set)되었는지, 즉 값이 할당되어 있고 그 값이 NULL이 아닌지를 확인합니다. 변수가 존재하고 NULL이 아닌 값을 가지고 있다면 TRUE를 반환합니다.
여기서 중요한 점은 ""(빈 문자열), 0, "0", FALSE처럼 값이 없어 보이는 경우에도 실제로는 값이 할당된 것으로 간주되므로 isset()은 TRUE를 반환한다는 사실입니다.
isset() 예제
<?php
$val = '0';
if( isset($val)) {
print_r(" $val 은 isset 함수로 설정된 값입니다 <br>");
}
$my_array = array();
echo isset($my_array['New_value']) ?
'배열 요소가 설정되어 있습니다.' : '배열 요소가 설정되어 있지 않습니다.';
?>
실행 결과
0 은 isset 함수로 설정된 값입니다
배열 요소가 설정되어 있지 않습니다.
문자열 '0'도 값으로 할당되었기 때문에 isset()은 TRUE를 반환한 반면, 빈 배열에 존재하지 않는 키 'New_value'는 설정되지 않았으므로 FALSE를 반환했습니다.
!empty() 함수란?
empty()는 변수가 비어 있는지(empty)를 확인합니다. PHP에서 "비어 있다"고 판단되는 값은 다음과 같습니다.
""(빈 문자열)0(정수)0.0(실수)"0"(문자열)NULLFALSEarray()(빈 배열)- 클래스 내에서 선언만 되고 값이 할당되지 않은 변수
따라서 !empty()는 위 목록에 해당하지 않을 때, 즉 변수가 실질적인 값을 가지고 있을 때만 TRUE를 반환합니다.
!empty() 예제
<?php
$temp_val = 0;
if (empty($temp_val)) {
echo $temp_val . ' 은 비어 있는 값으로 간주됩니다';
}
echo "\n\n";
$new_val = 1;
if (!empty($new_val)) {
echo $new_val . ' 은 값이 설정된 것으로 간주됩니다';
}
?>
실행 결과
0 은 비어 있는 값으로 간주됩니다
1 은 값이 설정된 것으로 간주됩니다
정수 0은 empty()가 비어 있는 값으로 판단하지만, 1은 유효한 값이므로 !empty()가 TRUE를 반환합니다.
핵심 차이 비교표
두 함수의 동작 차이를 한눈에 비교하면 다음과 같습니다.
| 변수 값 | isset() | !empty() |
|---|---|---|
"" (빈 문자열) | TRUE | FALSE |
0 / "0" / 0.0 | TRUE | FALSE |
FALSE | TRUE | FALSE |
NULL | FALSE | FALSE |
array() (빈 배열) | TRUE | FALSE |
| 선언되지 않은 변수 | FALSE | FALSE |
유효한 값 (예: 1, "abc") | TRUE | TRUE |
정리
isset()은 "변수에 값이 할당되어 있고 NULL이 아닌가"를 묻는 반면, !empty()는 "변수가 의미 있는 값을 가지고 있는가"를 묻습니다. 따라서 변수의 존재 여부만 확인할 때는 isset()을, 폼 입력값처럼 유효한 데이터가 들어왔는지까지 확인하고 싶을 때는 !empty()를 사용하는 것이 적절합니다. 또한 isset()과 empty()는 언어 구조(language construct)이기 때문에 존재하지 않는 변수에 사용해도 에러가 발생하지 않는다는 점도 기억해 두면 유용합니다.