PHP Version
4+
/* NULL type */
var_dump(is_null(null)); // bool(true) => Case-insensitive
var_dump(is_null(Null)); // bool(true) => Case-insensitive
var_dump(is_null(NULL)); // bool(true) => Case-insensitive

/* Unassigned variable */
$a;
var_dump(is_null($a)); // bool(true) => The value of an unassigned variable is null

/* Empty string or whitespace string */
var_dump(is_null(''));     // bool(false)
var_dump(is_null('    ')); // bool(false)

/* Empty array */
var_dump(is_null(array())); // bool(false)
var_dump(is_null([]));      // bool(false)

/* boolean */
var_dump(is_null(true));  // bool(false)
var_dump(is_null(false)); // bool(false)
is_null(mixed $value): bool
$empty_string = '';
var_dump(is_string($empty_string)); // bool(true)
var_dump(is_null($empty_string));   // bool(false)

$null_value = null;
var_dump(is_string($null_value));   // bool(false)
var_dump(is_null($null_value));     // bool(true)
$a = array(); // Empty array using array()
$b = []; // Empty array using [] => Introduced in PHP 5.4+

var_dump(is_array($a)); // true
var_dump(is_array($b)); // true

var_dump(is_null($a)); // false
var_dump(is_null($b)); // false
$a; // No value assigned to $a (Uninitialized)

var_dump(is_null($a)); // true => $a is undefined (Accessing it may trigger an "Undefined variable" Warning)
var_dump(is_null($b)); // true => $b is undefined (Accessing it may trigger an "Undefined variable" Warning)
$var = null;

/* Scenario 1: When the variable is definitely declared (is_null is recommended) */
// Checking the value of a variable passed as a function argument or declared above
if (is_null($var)) {
    echo 'The value of the variable is explicitly null.';
}

/* Scenario 2: When it is uncertain if the variable has been declared */
// Checking external data (like $_GET, $_POST, etc.) or conditionally generated variables
if (!isset($var)) {
    echo 'The variable is either undefined or its value is null.';
}
function getValue($condition) {
    if ($condition) {
        return null; // Explicitly return null to represent 'no value'
    }
    return 'someValue';
}

$result = getValue(true);

// While isset($result) could be used, is_null clearly reveals the intent of 'checking for null'
if (is_null($result)) {
    echo 'The function explicitly returned null.';
} else {
    echo 'The function returned a valid value: ' . $result;
}