Все способы обработки null значений в PHP
Null — это специальный тип данных в PHP, который представляет собой переменную, не имеющую значения. Переменная считается равной null, если:
- ему присвоена константа
null. - он был установлен в значение
nullс помощью функцииsettype().
В этой статье мы рассмотрим все способы работы со значениями 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 правилам избыточности разрешения типов.