Операторы ?? и ?-> (null coalescing и nullsafe): чем помогают
Операторы ?? и ?-> в PHP
В PHP операторы ?? (null coalescing) и ?-> (nullsafe) были введены в версии 7.0 и 7.4 соответственно. Они значительно упрощают работу с переменными, которые могут быть неопределёнными или равны null. Давайте подробнее рассмотрим каждый из них и их применение.
Оператор ?? (null coalescing)
Этот оператор позволяет проверить, существует ли переменная и не равна ли она null. Если переменная не определена или равна null, возвращается значение по умолчанию.
Примеры использования:
-
Простой пример:
$value = $someVar ?? 'default value';В этом примере, если
$someVarне определён или равенnull, переменной$valueбудет присвоено'default value'. -
Использование с массивами:
$data = ['name' => 'John']; $name = $data['name'] ?? 'Unknown'; // 'John' $age = $data['age'] ?? 25; // 25Здесь, если ключ
'age'отсутствует в массиве, переменной$ageбудет присвоено значение25.
Оператор ?-> (nullsafe)
Этот оператор позволяет безопасно обращаться к свойствам и методам объектов. Если объект равен null, оператор вернёт null, вместо того чтобы вызывать ошибку.
Примеры использования:
-
Обращение к свойству:
$user = null; $username = $user?->name; // null, без ошибкиВ этом примере, если
$userравенnull, обращение к свойствуnameне вызовет ошибку, и$usernameпросто будет равенnull. -
Вызов метода:
$user = null; $userEmail = $user?->getEmail(); // null, без ошибкиТакже, если метод
getEmailвызывается на объекте, равномnull, это также не приведёт к ошибке.
Преимущества использования
- Сокращение кода: Оба оператора позволяют избегать громоздких проверок на
isset()иnull, что делает код более читаемым и компактным. - Безопасность: Оператор
?->предотвращает возникновение ошибок при попытке доступа к свойствам или методам неинициализированных объектов.
Практические советы
- Используйте оператор
??для задания значений по умолчанию, когда не уверены, существует ли переменная. - Применяйте оператор
?->при работе с объектами, которые могут не быть инициализированы, чтобы избежать ошибок выполнения.
Распространённые ошибки
- Не путайте
??с оператором?, который используется для тернарного оператора. Например,condition ? trueValue : falseValue— это отдельная конструкция. - Помните, что оператор
?->не работает с массивами, только с объектами. Если вы попытаетесь использовать его с массивом, это приведёт к ошибке.
Использование операторов ?? и ?-> значительно упрощает обработку данных и позволяет писать более безопасный и элегантный код в php.