PHP에서 변수 체크시 많이 쓰는 함수는 isset 과 empty 함수가 있다.  이 두함수 관계는 서로 친척 관계정도로 생각하면 되나 엄밀히 따지면 사용하는 용도가 다르기 때문에 체크해야할 변수 상황에 맞게 써야 한다. isset 같은 경우 변수가 존재하는지에 대한 체크이며 empty 함수의 경우 변수의 값이 비었는지 체크하기때문에 주로 값 필 수 여부 체크시에는 empty 함수만 사용하게 된다. 우선 하단의 예제를 통해 자세히 알아보자 

 

isset 함수 사용 시
<?php
$var = 1;
$var_x = 2;
$var2 = null;
var_dump(isset($var)); // true
var_dump(isset($var_2)); // false
var_dump(isset($var,$var_x)); // true
var_dump(isset($var,$var_2)); // false

 

위의 예제를 보면 $var  변수와 $var_x 변수를 선언했고, isset 함수를 통해 각 변수를 체크하였다. 참고로 isset 함수의 경우 여러개의 변수를 파라미터로 받아서 체크가 가능하며 $var2의 경우 null 이기 때문에 변수가 없는것으로 인식이된다. 그렇다고 unset($var2)로 처리했을때와는 다르니 주의가 필요하다. 

 

empty 함수 사용 시
<?php
$var = 1;
$var_x = '';
$var_2 = 0;
var_dump(empty($var)); // false
var_dump(empty($var_x)); // true
var_dump(empty($var_2)); // true
var_dump(empty($var_3)); // true

 

empty 함수의 결과를 보면 값이 비었는지 체크하기때문에 비었으면 true 이고 값이 있으면 false 이다.  여기서 중요한점은 PHP에서 값은 0, false 은 없는 값으로 인식되기때문에 값 자체가 0, false 일 경우에는 isset 과 if 조건문으로 부등호 === 을 통해 처리를 해야한다. 해당 예제를 본다면 아래와 같다. 

<?php
$var = 0;
$var2 = false;
if( isset($var) && $var === 0){ echo '성공'; }
if( isset($var2) && $var2 === false){ echo '성공'; }

 

위의 조건 부등호 === 의 경우 데이터의 타입까지 체크할 때 사용하는 방법으로 주로 1개의 정해진 값을 체크해야 할 경우 많이 사용한다. 실무에서 사용한다면 주로 bool(부울) 값을 체크할때 많이 사용되는데 받은 결과값이 true 또는 false 인지 정확하게 체크해야하는 경우 사용하게 된다.  

 

isset 함수와 empty 함수에 대해 알아보았는데 empty 함수의 경우 사용하다보면 가끔 실수 할때 가 있다. 그이유가 empty 함수는 값이 비었는지 체크하기때문에 주로 아래와 같이 쓰게 되는데 

<?php
if( empty($_POST['title']) ) { echo '타이틀을 입력해 주세요'; exit; }

 

그렇지 않고 아래와 같이 변수 초기화 할때 값이 비어있지 않을 경우 처리를 하게되는데 이때 간혹 실수를 하게된다. 

<?php
$_POST['id'] = empty($_POST['id']) ? $_POST['id'] : ''; // 올바른 방법 => $_POST['id'] = !empty($_POST['id']) ? $_POST['id'] : '';

 

뭐 이건 정말 어이없는 실수이긴 하지만 정신없이 코딩하다 보면 한번쯤 실수할때가 있다. 그럼 마지막으로 변수 체크시 그동안 우리는 아래와 같이 간단하게 체크를 했을 것이다. 

<?php
if( $title == '' ){ echo '타이틀을 입력해 주세요.'; exit; }

 

위의 조건문은 프로그램상 보면 맞겠지만 현재 PHP 5.6이상에서는 PHP 에러 노출여부에 따라 아래와 같이 Notice 경고를 볼 수 있다. 

 

위의 문제는 PHP의 에러 설정(display_errors)를 0으로 설정하면 해결되겠지만  주의가 필요한게 서버내 로그에서도 에러레벨 설정이 안되었을 경우 지속적으로 쌓이게되어 로그파일이 불필요하게 늘어나는 문제가 있다.  따라서 애초당시 모든 변수체크는 아래와 같이 isset 또는 empty 함수를 통해 체크해주는게 좋다. 

<?php
if( empty($title) ){ echo '타이틀을 입력해 주세요.'; exit; }
if( !isset($content) || $content == '' ){ echo '내용을 입력해 주세요.'; exit; }

 

위의 예제소스를 보면 알겠지만 처음에 이야기한 값이 존재하는지 체크할떄 empty를 많이 사용하는 이유를 알 수 있다. isset 함수를 사용하면 조건문에서 2가지를 걸어야하지만 empty 함수로 체크할때는 간단하게 체크가 가능하다. 물론 값이 0 이나 false일때는 다른 방법으로 체크를 해야한다.