📚
#59 07.10.2025 PHP Basics
is_null(mixed $value): bool

Расскажите об этой функции всё, что знаете.

is_null() проверяет, равна ли переменная null. Возвращает true только для null. Генерирует Notice для необъявленных переменных — это главная опасность. Функционально эквивалентна === null, но медленнее. Всегда используйте isset() перед проверкой необъявленных переменных.

Подробнее
⚠️
Внимание! Этот текст был сгенерирован AI-ассистентом. Информация может содержать неточности и требует проверки.

Полный ответ:

1. Основное назначение и синтаксис

is_null() — это функция, которая проверяет, является ли переменная null.

is_null(mixed $value): bool
  • Возвращает true, если переменная равна null
  • Возвращает false для любого другого значения

2. Примеры использования

var_dump(is_null(null));     // true
var_dump(is_null(0));        // false
var_dump(is_null(''));       // false
var_dump(is_null(false));    // false
var_dump(is_null([]));       // false

$var = null;
var_dump(is_null($var));     // true

$unset_var;
var_dump(is_null($unset_var)); // true + Notice

3. Критически важное поведение с необъявленными переменными

Важная особенность: is_null() генерирует предупреждение (E_NOTICE) для необъявленных переменных.

// ОПАСНО: переменная $undefined не объявлена
var_dump(is_null($undefined)); // bool(true) + Notice: Undefined variable

// БЕЗОПАСНО: сначала проверяем существование
if (isset($undefined) && is_null($undefined)) {
    // Этот код не выполнится
}

4. Сравнение с другими способами проверки на null

Строгое сравнение (===):

$var = null;

var_dump($var === null);    // true
var_dump(is_null($var));    // true - то же самое

Нестрогое сравнение (==):

var_dump(null == false);    // true (опасно!)
var_dump(null == 0);        // true (опасно!)
var_dump(null == '');       // true (опасно!)
var_dump(is_null(false));   // false (правильно)

5. Разница между способами проверки

Метод Необъявленная переменная null Другие значения
is_null($var) true + Notice true false
$var === null true + Notice true false
isset($var) false false true
$var == null true + Notice true true для false, 0, ‘’

6. Практические сценарии

Безопасная проверка:

// ПЛОХО - может вызвать Notice
if (is_null($maybe_undefined)) {
    // ...
}

// ХОРОШО - безопасная проверка
if (!isset($maybe_undefined) || $maybe_undefined === null) {
    // Переменная либо не объявлена, либо равна null
}

В функциях с nullable-параметрами:

function processUser(?string $name): void {
    if (is_null($name)) {
        echo "Name is not provided";
        return;
    }
    echo "Hello, $name";
}

processUser(null); // "Name is not provided"
processUser("John"); // "Hello, John"

7. Особенности с типами (PHP 7.1+)

Nullable types:

function findUser(int $id): ?User {
    // Возвращает User или null
    return $users[$id] ?? null;
}

$user = findUser(123);
if (is_null($user)) {
    echo "User not found";
}

Union types с null (PHP 8.0+):

function processValue(string|int|null $value): void {
    if (is_null($value)) {
        echo "Value is null";
    }
}

8. Отличие от empty() и isset()

$values = [null, 0, '', false, [], '0'];

foreach ($values as $value) {
    echo "Value: " . json_encode($value);
    echo " | is_null: " . (is_null($value) ? 'true' : 'false');
    echo " | empty: " . (empty($value) ? 'true' : 'false');
    echo " | isset: " . (isset($value) ? 'true' : 'false');
    echo "\n";
}

9. Лучшие практики

Используйте === null вместо is_null():

// Функционально одинаковы, но === быстрее и короче
if ($var === null) { ... }  // Предпочтительнее
if (is_null($var)) { ... }  // Работает, но медленнее

Для проверки существования переменной:

// Проверка на существование и не-null
if (isset($variable)) {
    // Переменная существует и не равна null
}

// Проверка конкретно на null (только для объявленных переменных)
if (isset($variable) && $variable === null) {
    // Переменная существует и равна null
}

10. Производительность

$var === null обычно быстрее, чем is_null($var), так как:

  • === — языковая конструкция
  • is_null() — вызов функции

Итог:

is_null() — функция для проверки значения на null. Ключевые особенности:

  1. Возвращает true только для null
  2. Генерирует Notice для необъявленных переменных — это главная опасность
  3. Функционально эквивалентна === null
  4. Медленнее чем === null

Рекомендация: В большинстве случаев используйте $var === null вместо is_null($var) — это быстрее и безопаснее. Для проверки существования переменной всегда используйте isset() перед проверкой на null.