web-dev-qa-db-ja.com

ヌル合体代入とは?? = PHP 7.4の演算子

私はちょうどPHP 7.4の機能についてのビデオを見て、これを見た??=新しい演算子。私はすでに知っています??演算子。どう違うの?

9
emix

docs から:

Coalesce equalまたは?? = operatorは代入演算子です。左側のパラメーターがnullの場合、右側のパラメーターの値を左側のパラメーターに割り当てます。値がnullでない場合、何も行われません。

例:

// 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';

したがって、値がまだ割り当てられていない場合は、基本的に値を割り当てるための省略形です。

9
Pavel Lint

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';

これが機能しない1つのケースは、別の変数に値を割り当てようとしているため、この新しいオプションを使用できない場合です。そのため、これは歓迎されますが、いくつかの限られた使用例があるかもしれません。

5
Ramki

ヌル合体代入演算子は、ヌル合体演算子の結果を代入する簡単な方法です。

公式の例 リリースノート

$array['key'] ??= computeDefault();
// is roughly equivalent to
if (!isset($array['key'])) {
    $array['key'] = computeDefault();
}
3

Docs

$array['key'] ??= computeDefault();
// is roughly equivalent to
if (!isset($array['key'])) {
    $array['key'] = computeDefault();
}
1
Dmitry