is_null(mixed $value): bool
Расскажите об этой функции всё, что знаете.
is_null() проверяет, равна ли переменная null. Возвращает true только для null. Генерирует Notice для необъявленных переменных — это главная опасность. Функционально эквивалентна === null, но медленнее. Всегда используйте isset() перед проверкой необъявленных переменных.
Полный ответ:
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. Ключевые особенности:
- Возвращает
trueтолько дляnull - Генерирует Notice для необъявленных переменных — это главная опасность
- Функционально эквивалентна
=== null - Медленнее чем
=== null
Рекомендация: В большинстве случаев используйте $var === null вместо is_null($var) — это быстрее и безопаснее. Для проверки существования переменной всегда используйте isset() перед проверкой на null.