Ответы:
Из документов :
Coalesce равный или ?? = оператор является оператором присваивания. Если левый параметр равен нулю, присваивает значение правому параметру левому. Если значение не нулевое, ничего не делается.
Пример:
// The folloving lines are doing the same
$this->request->data['comments']['user_id'] = $this->request->data['comments']['user_id'] ?? 'value';
// Instead of repeating variables with long names, the equal coalesce operator is used
$this->request->data['comments']['user_id'] ??= 'value';
Таким образом, это просто сокращение для присвоения значения, если оно не было назначено ранее.
В PHP 7 это было первоначально выпущено, позволяя разработчику упростить проверку isset () в сочетании с троичным оператором. Например, до PHP 7 у нас мог бы быть этот код:
$data['username'] = (isset($data['username']) ? $data['username'] : 'guest');
Когда был выпущен PHP 7 , мы получили возможность написать это так:
$data['username'] = $data['username'] ?? 'guest';
Однако теперь, когда выйдет PHP 7.4 , это можно упростить еще дальше:
$data['username'] ??= 'guest';
Один из случаев, когда это не работает, если вы хотите присвоить значение другой переменной, поэтому вы не сможете использовать эту новую опцию. Таким образом, хотя это приветствуется, может быть несколько случаев ограниченного использования.
Оператор присваивания нулевого объединения - это краткий способ присвоения результата оператору объединения нулей.
Пример из официальных заметок о выпуске :
$array['key'] ??= computeDefault();
// is roughly equivalent to
if (!isset($array['key'])) {
$array['key'] = computeDefault();
}
Примеры документов :
$array['key'] ??= computeDefault();
// is roughly equivalent to
if (!isset($array['key'])) {
$array['key'] = computeDefault();
}
The folloving lines...