NULL의 개념
NULL 타입은
값이 없음을 나타내는 데이터 타입입니다.
이 데이터 타입의 값은 하나뿐이며 null 값입니다.
변수에 null 값을 할당했을 때에도 해당 변수는 NULL 타입이 됩니다.
null 값은
NULL 타입의 유일한 값입니다. NULL 타입을 가지는 변수의 값은 언제나 대소문자를 구분하지 않는 상수 null입니다.
변수에 null 값을 할당하면 해당 변수는 NULL 타입이 됩니다.
NULL 타입과 null 값의 개념을 정리하자면 다음과 같이 표현할 수 있습니다.
NULL 타입은
값이 없음을 나타내는 데이터 타입입니다.
또한, 변수에 명시적으로 null 값을 할당했을 때에도 NULL 타입을 갖게 됩니다. NULL 타입의 값은 하나뿐이며, 대소문자를 구분하지 않는 상수 null입니다.
타입을 말하는 NULL이나 값을 말하는 null 모두 대소문자를 구분하지 않습니다.
NULL 타입은 Null 타입, null 타입과 동일하며, null 값은 Null 값, NULL 값과 동일합니다.
여기에서는 타입과 값을 편의상 구분하기 위해서 타입은 'NULL 타입', 값은 'null 값'이라고 이미 표기했고 앞으로도 이렇게 표기하겠습니다.
예제
/* 값이 할당되지 않은 변수 $a (미정의 상태) */
$a;
var_dump($a); // NULL (Warning 발생)
/* 변수에 명시적으로 null 값을 할당했을 때 */
$b = null; // 대소문자를 구분하지 않음
var_dump($b); // NULL
$c = Null; // 대소문자를 구분하지 않음
var_dump($c); // NULL
$d = NULL; // 대소문자를 구분하지 않음
var_dump($d); // NULL
/* 선언되지 않은 변수 $e (미정의 상태) */
var_dump($e); // NULL (Warning 발생)
주의하세요!
값이 할당되지 않은 변수나, 선언(정의)되지 않은 변수를 사용할 경우 모두 Warning: Undefined variable가 발생합니다.
NULL 타입 체크하기
gettype() 함수
gettype() 함수는
변수의 데이터 타입을 문자열로 반환합니다.
다음과 같은 예제를 통해 이해할 수 있습니다.
$a = null;
$b; // 값이 할당되지 않은 변수 $b (미정의 상태)
echo gettype($a); // 'NULL'
echo gettype($b); // 'NULL' (Warning 발생)
is_null() 함수
is_null() 함수는
매개변수로 전달된 값이 NULL 타입이면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
다음과 같은 예제를 통해 이해할 수 있습니다.
$a = null;
$b; // 값이 할당되지 않은 변수 $b (미정의 상태)
var_dump(is_null($a)); // true
var_dump(is_null($b)); // true (Warning 발생)
NULL 타입으로 변환하기
변수를 NULL 타입으로 변환하려면 오직 변수에 null 값을 할당하는 것입니다.
/* 변수의 초깃값으로 null을 할당해서 NULL 타입으로 만들기 */
$a = null;
var_dump($a); // NULL
/* 데이터 타입이 string인 변수를 NULL 타입으로 만들기 */
$b = "val";
$b = null;
var_dump($b); // NULL
주의할 점
변수를 NULL 타입으로 변환하기 위해서 unset()의 사용이나 (unset) $var와 같은 데이터 타입 저글링(Type Juggling)을 사용하지 마세요.
unset()의 사용
그리고, PHP 서버 설정에 따라 unset()을 사용하여 변수를 삭제하면 해당 변수에 접근할 때 Warning: Undefined variable과 같은 경고가 발생할 수 있습니다. 이는 변수가 더 이상 존재하지 않기 때문에 해당 변수에 접근하려고 할 때 발생하는 것입니다.
$var = "str";
unset($var);
// Warning: Undefined variable...
var_dump($var); // NULL
$var = "str";
$var = null;
var_dump($var); // NULL
(unset) $var와 같은 데이터 타입 저글링(Type Juggling)을 사용
이 기능은 PHP 7.2.0부터 사용이 중단되었으며 PHP 8.0.0부터 제거되었습니다. 이 기능에 의존하는 것은 매우 권장되지 않습니다.
$var = "str";
var_dump((unset)$var); // NULL
$var = "str";
$var = null;
var_dump($var); // NULL
변수를 NULL 타입으로 변환하려면 오직 변수에 null 값을 할당하는 것입니다.
NULL 타입을 부울(boolean) 타입으로 평가하면 false
NULL 타입을 부울(boolean) 타입으로 평가하면 false로 평가됩니다.
$var = null;
if ($var) {
echo 'true로 평가됩니다.';
} else {
echo 'false로 평가됩니다.';
}
// 출력: 'false로 평가됩니다.'
var_dump(is_bool($var)); // bool(false)
NULL 타입과 빈 문자열, 빈 배열 구분
빈 문자열이나 빈 배열은 NULL 타입이 아닙니다.
$e = '';
$f = array();
var_dump(is_null($e)); // bool(false)
var_dump(is_null($f)); // bool(false)