Все способы обработки null значений в PHP

Источник: «All the ways to handle null values in PHP»
Тип null является единичным типом PHP, т.е. имеет только одно значение: null. В этой статье мы рассмотрим все способы работы со значениями null в PHP.

Null — это специальный тип данных в PHP, который представляет собой переменную, не имеющую значения. Переменная считается равной null, если:

В этой статье мы рассмотрим все способы работы со значениями null в PHP.

Функция is_null()

Функция is_null() используется для проверки того, является ли переменная null или нет. Она возвращает true, если переменная является null, и false в противном случае.

$foo = null;

if (is_null($foo)) {
echo '$foo is null';
}

// $foo is null

Функция is_null() не может проверить, задана переменная или нет. Поэтому перед использованием функции is_null() необходимо воспользоваться функцией isset() для проверки того, задана переменная или нет.

Оператор объединения с null

Оператор слияния с null (??) используется для проверки того, является ли переменная null или нет. Он возвращает значение переменной, если она не является null, и возвращает значение второго операнда, если переменная является null.

Оператор был введён в PHP 7.0.

$foo = null;

echo $foo ?? 'bar';
// bar

Для проверки нескольких переменных можно также использовать оператор слияния с null.

$foo = null;

echo $foo ?? $bar ?? 'baz';

// baz

Одна проблема заключается в том, что оператор слияния с null вернёт значение второго операнда, даже если переменная не задана или undefined.

echo $bar ?? 'foo';

// foo

Оператор null присваивания

Оператор null присваивания (??=) используется для присвоения значения переменной, если она равна null. Он присваивает значение правого операнда левому операнду, если левый операнд равен null.

$foo = null;

$foo ??= 'bar';

echo $foo;
// bar

Оператор nullsafe

Оператор nullsafe (?->) используется для безопасного вызова метода/свойства переменной, если она не является null. Он возвращает значение метода, если переменная не является null, и возвращает null в противном случае.

Этот оператор появился ещё в PHP 8.0.

class User
{
public function getName()
{
return 'John Doe';
}
}

$user = null;
echo $user?->getName();
// null

$user = new User;
echo $user?->getName();
// John Doe

Тернарный оператор

Для проверки того, является ли переменная нулевой или нет, можно по-прежнему использовать старый добрый тернарный оператор. Но использовать его не рекомендуется, так как он многословен и не так удобен для чтения, как оператор null присваивания.

$foo = null;

echo $foo ? $foo : 'bar';
// bar

Обнуляемые типы

Иногда требуется явно объявить параметр функции или возвращаемый тип как обнуляемые. Это можно сделать с помощью префикса ? перед объявлением типа.

function foo(?string $bar): ?string
{
return $bar;
}

echo foo(null);
// null

echo foo('bar');
// bar

Таким образом, можно явно указать функции, что параметр $bar может быть null, и функция также может вернуть null.

Обнуляемые типы существуют со времён PHP 7.1.

Null как самостоятельный тип

Начиная с версии PHP 8.2, можно использовать null как самостоятельный тип.

Это означает, что вы можете объявить переменную типа null, и она будет принимать в качестве значения только null.

Аналогично можно задать тип возвращаемого значения функции равным null, и она будет возвращать только null в качестве значения.

class Nil
{
public null $nil = null;

public function isNull(null $nil): null
{
return null;
}
}

$nil = new Nil;

$nil->isNull(null);
// returns null

$nil->isNull('foo');
// PHP Fatal error: Uncaught TypeError: Nil::isNull():
// Argument #1 ($nil) must be of type null, string given

При указании типа метода и переменных, использующих null, следует иметь в виду, что если попытаться обозначить null как обнуляемый тип (?null), то это приведёт к ошибке компиляции, что соответствует действующим в PHP правилам избыточности разрешения типов.

Дополнительные материалы

Предыдущая Статья

UUID в Laravel: Общие вопросы

Следующая Статья

Глубокое погружение в отношения Фабрик