PHP isset(), empty(), isnull() 비교(차이점)
PHP로 코딩을 하다보면 값 검증을 할 때 자주 쓰이는 것이 isset 과 empty 와 is_null 함수입니다.
셋은 비슷하면서도 다른 차이점이 있습니다.
무작정 해당 함수를 쓰기 보단 자세히 파악해서 구분해서 사용 합니다.
isset()
isset() 함수는 해당 변수에 값이 존재하고, NULL 이 아닌지를 확인합니다.
변수가 존재하고 NULL 이 아닌 값을 가지고 있으면 TRUE를 리턴합니다.
그 외에는 FALSE를 리턴합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | <?php // null 값 테스트 echo 'null 값 테스트 : '; $val = null; if(isset($val)){ echo 'true'; } else { echo 'false'; } // 선언만한 변수 테스트 echo '선언만한 변수 테스트 : '; $val2; if(isset($val2)){ echo 'true'; } else { echo 'false'; } // 공백 테스트 echo '공백 테스트 : '; $val3 = ''; if(isset($val3)){ echo 'true'; } else { echo 'false'; } // 숫자 테스트 echo '숫자 테스트 : '; $val4 = 1; if(isset($val4)){ echo 'true'; } else { echo 'false'; } // 빈 배열 echo '빈 배열 테스트 : '; $val4 = array(); if(isset($val4)){ echo 'true'; } else { echo 'false'; } ?> | cs |
위 코드와 같이 if문 안에 isset 으로 NULL 값이 들어간 $test 변수를 검사하면 False가 나옵니다.
그리고 변수 $test에 어떠한 값도 초기화 하지않고 isset으로 검사하면 값은 NULL 이기 때문에 false가 리턴됩니다.
그 외 변수에 숫자, 문자, 공백, 0, 빈 배열 등 값이 들어가도 NULL 값이 아니기 때문에 값이 있다고 보고 true를 리턴합니다.
empty()
empty()는 변수에 값이 비어 있는지 체크합니다.
빈 값이면 TRUE를 리턴하고 아니면 FALSE를 리턴합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | <?php // null 값 테스트 echo 'null 값 테스트 : '; $val = null; if(empty($val)){ echo 'true'; } else { echo 'false'; } // 선언만한 변수 테스트 echo '선언만한 변수 테스트 : '; $val2; if(empty($val2)){ echo 'true'; } else { echo 'false'; } // 공백 테스트 echo '공백 테스트 : '; $val3 = ''; if(empty($val3)){ echo 'true'; } else { echo 'false'; } // 숫자 테스트 echo '숫자 테스트 : '; $val4 = 1; if(empty($val4)){ echo 'true'; } else { echo 'false'; } // 빈 배열 echo '빈 배열 테스트 : '; $val4 = array(); if(empty($val4)){ echo 'true'; } else { echo 'false'; } ?> | cs |
위 코드를 보면 NULL, 공백, 0, 빈 배열은 값이 없는 걸로 간주해 TRUE를 리턴합니다.
값이 1이거나 배열에 어떠한 값이 있으면 비어있지 않은 걸로 간주해 FALSE를 리턴합니다.
isset, empty 모두 값 검증에 주로 쓰이며 조건문과 함께 쓰이는 경우가 많습니다.
!를 통해 해당 조건의 반대되는 경우를 조건으로 사용하기도 합니다.
is_null()
is_null()은 변수에 값이 NULL인지를 확인합니다.
변수에 값이 NULL 이거나 변수가 선언 안되어 있는 경우 TRUE를 리턴하고 아니면 FALSE를 리턴합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <? // 데이터베이스에서 넘어오는 변수가 null로 오는 경우가 많습니다. // 또는 class에서 변수들을 null로 처리하는 경우가 많습니다. $val = NULL; if (is_null($val)) { echo "해당 변수는 NULL이 맞습니다."; } else { echo "해당 변수는 NULL이 아닙니다."; } // 출력결과 : 해당 변수는 NULL이 맞습니다. // 변수가 선언 안되어있어도 True를 반환하지만 에러메시지가 동반되므로 // 반드시 에러 무시 구문을 사용하셔야 합니다. if (@is_null($val)) { echo "해당 변수는 NULL이 맞습니다."; } else { echo "해당 변수는 NULL이 아닙니다."; } // 출력결과 : 해당 변수는 NULL이 맞습니다. ?> | cs |
위 코드를 보면 변$val에 NULL이 값으로 있는 경우 TRUE를 리턴합니다.
변수를 선언 하지 않은 경우에도 TRUE를 반환하지만 에러메세지가 출력되므로 반드시 오류 억제(에러 무시) 구분을 사용해야 합니다.
참고 하실 수 있게 isset, empty, is_null의 차이점을 아래 표로 정리해봅니다.
값 | if($var) | isset | empty | is_null |
---|---|---|---|---|
$var=1 | TRUE | TRUE | FALSE | FALSE |
$var=””; | FALSE | TRUE | TRUE | FALSE |
$var=”0”; | FALSE | TRUE | TRUE | FALSE |
$var=0; | FALSE | TRUE | TRUE | FALSE |
$var=NULL; | FALSE | FALSE | TRUE | TRUE |
$var | FALSE | FALSE | TRUE | TRUE |
$var=array() | FALSE | TRUE | TRUE | FALSE |
$var=array(1) | TRUE | TRUE | FALSE | FALSE |
- 참고1 https://medium.com/@devpang20/php-isset-%EA%B3%BC-empty-%EC%9D%98-%EC%B0%A8%EC%9D%B4-88f680f64e2f
- 참고2 https://winplz.tistory.com/entry/isset-empty-isnull-unset-%ED%95%A8%EC%88%98
- 참고3 https://blog.naver.com/PostView.nhn?blogId=reviewer__&logNo=221425844151
- 참고4 https://lynmp.com/ko/article/ob811c9dc5mi