isset vs empty vs is_null
PHP has multiple functions to check PHP variables with respect to their initialized values. These functions are isset, empty and is_null.
- isset() is to check if a variable is set with a value and that value should not be null.
- empty() is to check if a given variable is empty. The difference with isset() is, isset has null check.
- is_null() is to check whether a variable is defined as null.
I feel the effective way to communicate the difference would be with the help of a TRUTH TABLE,
| “” | “apple” | NULL | FALSE | 0 | undefined | TRUE | array() | 123 | |
| isset | TRUE | TRUE | FALSE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE |
| empty | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE | FALSE | TRUE | FALSE |
| is_null | FALSE | FALSE | TRUE | FALSE | FALSE | Warning / TRUE | FALSE | FALSE | FALSE |
Ok! Now find the difference!

Code to understand the difference
difference.php
<?php
print "<br/>ISSET: <br/>";
$var = "";
print 'isset(""): ' . isset($var) . "<br/>";
$var = 'apple';
print "isset('apple'): " . isset($var) . "<br/>";
$var = null;
print "isset(null): " . isset($var) . "<br/>";
$var = FALSE;
print "isset(FALSE): " . isset($var) . "<br/>";
$var = 0;
print "isset(0): " . isset($var) . "<br/>";
print "isset(undefined): " . isset($var3) . "<br/>";
$var = TRUE;
print "isset(TRUE): " . isset($var) . "<br/>";
$var = array();
print "isset(array()): " . isset($var) . "<br/>";
$var = 123;
print "isset(123): " . isset($var) . "<br/>";
print "<br/>EMPTY: <br/>";
$var = "";
print 'empty(""): ' . empty($var) . "<br/>";
$var = 'apple';
print "empty('apple'): " . empty($var) . "<br/>";
$var = null;
print "empty(null): " . empty($var) . "<br/>";
$var = FALSE;
print "empty(FALSE): " . empty($var) . "<br/>";
$var = 0;
print "empty(0): " . empty($var) . "<br/>";
print "empty(undefined): " . empty($var1) . "<br/>";
$var = TRUE;
print "empty(TRUE): " . empty($var) . "<br/>";
$var = array();
print "empty(array()): " . empty($var) . "<br/>";
$var = 123;
print "empty(123): " . empty($var) . "<br/>";
print "<br/>IS_NULL: <br/>";
$var = "";
print 'is_null(""): ' . is_null($var) . "<br/>";
$var = 'apple';
print "is_null('apple'): " . is_null($var) . "<br/>";
$var = null;
print "is_null(null): " . is_null($var) . "<br/>";
$var = FALSE;
print "is_null(FALSE): " . is_null($var) . "<br/>";
$var = 0;
print "is_null('0'): " . is_null($var) . "<br/>";
print "is_null(undefined):" . is_null($var2) . "<br/>";
$var = TRUE;
print "is_null(TRUE): " . is_null($var) . "<br/>";
$var = array();
print "is_null(array()): " . is_null($var) . "<br/>";
$var = 123;
print "is_null(123): " . is_null($var) . "<br/>";
?>
Output:
code
ISSET:
isset(""): 1
isset('apple'): 1
isset(null):
isset(FALSE): 1
isset(0): 1
isset(undefined):
isset(TRUE): 1
isset(array()): 1
isset(123): 1
EMPTY:
empty(""): 1
empty('apple'):
empty(null): 1
empty(FALSE): 1
empty(0): 1
empty(undefined): 1
empty(TRUE):
empty(array()): 1
empty(123):
IS_NULL:
is_null(""):
is_null('apple'):
is_null(null): 1
is_null(FALSE):
is_null('0'):
Notice: Undefined variable: var2 in .../index.php on line 51
is_null(undefined):1
is_null(TRUE):
is_null(array()):
is_null(123):
Differences
isset:
Returns true for empty string, False, 0 or an undefined variable. Returns false for null.
empty:
Returns true for null, empty string, False, 0 or an undefined variable. Returns true if there is any value.
is_null:
Returns true for null only. Returns false in all other cases. Throws warning if the variable is undefined. If you suppress the warning, you will get true.
Differences table
| Value of $var | isset | empty | is_null |
|---|---|---|---|
| “” (empty string) | true | true | false |
| ‘apple’ (string value) | true | false | false |
| null (declaration-only) | false | true | true |
| FALSE | true | true | false |
| 0 | true | true | false |
| undefined variable | false | true | Warning/true |
| TRUE | true | false | false |
| array() (empty array) | true | true | false |
| 123 (numeric value) | true | false | false |