isset ← 정반대 개념 → is_null
is_null 함수는 이름에서 볼 수 있듯이, 변수가 null 값을 가지고 있는지 확인할 때 사용합니다. null 값을 가지면 true, null 값이 아닌 다른 값을 가지면 false를 반환합니다. 참고로 선언되지 않은 변수는 기본적으로 null 값을 가지고 있습니다. 기능면에서 isset은 is_null 정반대 개념입니다. 다시 말해서, isset이 false를 반환하면, is_null은 true를 반환합니다. 따라서 isset은 변수가 null 값을 가지지 않는지 확인합니다.
이 둘은 보통 if 절에 넣어서 많이 사용하게 되는데요, 둘 다 같은 기능(정확히는 정반대 값을 반환)을 하다보니 어떤 것을 사용해야하나 싶을 때가 있습니다. 둘 다 사용하면 되기는 하지만, 결론부터 말하면 isset을 사용하면 더 편리합니다.
왜 그런지 보기 위해 차이점 하나를 보겠습니다. isset은 함수가 아니라 언어 구성 요소이고, is_null은 함수입니다. 언어 구성 요소와 함수의 차이점은 함수는 받는 실행 인자의 변수가 선언되지 않았다면 경고메시지를 발생시킵니다. 이러한 이유로, 함수인 is_null의 실행 인자는 선언된 변수가 와야 하고, isset은 언어 구성 요소이기 때문에 선언되지 않은 변수가 실행 인자로 들어와도 경고 메시지가 뜨지 않습니다. 우리가 보통 if 절에서 조건을 사용할 때, 변수가 선언되지 않으면 false로 처리하는 것이 편합니다. 굳이 선언 되었는지 안 되었는지 조건을 더 넣고 싶진 않죠. 따라서 is_null보다는 isset을 사용하는 것이 더 편합니다. 아래에서 예제를 통해서 조금 더 알아 보겠습니다.
[1] is_null 함수
[1.1] 경고메시지 확인
말로만 설명하지 않고, 실제로 선언되지 않은 변수를 is_null 함수에 넣었을 때 경고메시지가 나오는지 예제를 통해 확인해 보겠습니다.
1
2
3
|
<?php
var_dump(is_null($noVar));
?>
|
Warning: Undefined variable $noVar in C:\Bitnami\wampstack-8.0.9-0\apache2\htdocs\hello.php on line 2
bool(true)
-
- 예제 목표:
- ‣ 선언되지 않은 변수를 is_null 함수에 넣었을 때, 경고 메시지가 나는지 확인해 봅니다.
- 예제 목표:
- var_dump(is_null($noVar));
- ‣ 변수 $noVar는 선언되지 않았고, 그대로 is_null 함수에 실행인자로 넣었습니다.
- var_dump(is_null($noVar));
- 출력 결과:
- ‣ 만약 PHP가 개발자 모드라면, 출력 결과에 Warning (경고) 메시지가 뜨는 것을 확인할 수 있습니다. 그리고 뒤에 bool(true)라고 결과가 출력됩니다. 만약 개발자 모드가 아니면, 경고 메시지는 무시되기 때문에 bool(true)라고만 출력될 거에요. 참고로 경고 메시지는 에러 메시지랑 달라서, 경고만 하고 나머지 코드를 계속 진행합니다. 반면 에러 메시지는 코드를 중단합니다.
- ‣ 이러한 경고메시지는 단순히 is_null에만 국한되는 것이 아니라, 모든 함수는 해당합니다. 모든 함수는 인자로 선언된 변수를 가져야 합니다.
- 예제 목표:
[1.2] 변수에 null 값을 넣었을 때?
조금 재밌는 실험을 해보겠습니다. 만약에 변수에 null 값을 넣고, is_null 함수를 돌리면 어떻게 될까요? 아래 예제에서 확인해 보겠습니다.
1
2
3
4
|
<?php
$var = null;
var_dump(is_null($var));
?>
|
bool(true)
-
- 예제 목표:
- ‣ null로 선언된 변수를 is_null 함수의 실행인자로 넣었을 때, 어떻게 출력되는지 확인해 보겠습니다.
- 코드 설명:
- $var = null;
- ‣ 여기서 변수 $var에 null 값을 명시적으로 넣어 줬습니다.
- $var = null;
- 출력 결과:
- ‣ 출력 결과를 보시면, 경고가 없이 bool(true)가 나오는 것을 확인할 수 있습니다.
- ‣ 보통 생각하기를, 선언되지 않은 변수는 null 값을 가진다고 합니다. 이 말은 사실입니다. 하지만 함수의 인자로 사용할 경우, 선언된 변수와 선언되지 않은 변수에는 경고 메시지를 띄우는지에 따른 차이점이 있습니다.
- 예제 목표:
[1.3] 선언된 변수를 unset 시키면?
조금 더 재밌는 실험을 계속 진행해 보겠습니다. 이러한 실험들은 프로그래밍 언어의 세계관을 엿볼 수 있기 때문에, 개인적으로 이러한 테스트를 좋아합니다. 😁
1
2
3
4
5
6
|
<?php
$var = ‘any value’;
unset($var);
var_dump(is_null($var));
?>
|
Warning: Undefined variable $var in C:\Bitnami\wampstack-8.0.9-0\apache2\htdocs\hello.php on line 5
bool(true)
-
- 예제 목표:
- ‣ 선언된 변수를 unset 시키면, is_null 함수가 에러 메시지를 발생시키는 확인해 봅니다.
- 코드 설명:
- $var = ‘any value’;
- ‣ 먼저 $var 변수에 아무 값이나 넣어서 선언시켜 보겠습니다.
- unset($var);
- ‣ 선언된 변수를 unset 시킵니다. 그런 다음, is_null에 unset 시킨 변수를 넣어 보겠습니다. 어떻게 될까요?
- $var = ‘any value’;
- 출력 결과:
- ‣ unset으로 변수를 초기화 해버리면, is_null 함수는 경고 메시지를 발생시킵니다.
- ‣ 따라서 직접 null 할당하는 것과 unset으로 초기화하는 것도 완전히 같은 것이 아닌 것을 알 수가 있습니다. 이것이 이번 실험에서 하고 싶은 말이였습니다. 👍
- 예제 목표:
[2] isset 언어 구성 요소
isset 함수가 아니라, isset 언어 구성 요소라고 부르는게 더 정확한 표현인 것 같습니다. 언어 구성 요소이기 때문에, 선언되지 않은 변수가 실행 인자로 와도 경고메시지를 띄우지 않습니다. 다른 언어랑은 조금 다른, 재밌는 PHP 세계관인것 같습니다.
1
2
3
|
<?php
var_dump(isset($noVar));
?>
|
bool(false)
-
- 예제 목표:
- ‣ isset 언어 구성 요소는 비선언 변수를 인자로 받아도, 경고 메시지를 띄우지 않음을 확인해 보겠습니다.
- 코드 설명:
- var_dump(isset($noVar));
- ‣ 선언 되지 않은 변수 $noVar를 바로 isset에 넣었습니다. 경고 메시지를 띄울까요?
- var_dump(isset($noVar));
- 출력 결과:
- ‣ 경고 메시지 없이, 결과값 bool(false)를 출력합니다.
- 예제 목표: