Все способы обработки 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 правилам избыточности разрешения типов.