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


10

PHP 7.4の今後の機能に関するビデオを見たばかりで、この??=新しいオペレーターを見ました。??オペレーターはもう知っています。どう違うの?

回答:


10

ドキュメントから:

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

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


4
また、公式ドキュメントでタイプミスを見つけたようです。The folloving lines...
Pavel Lint

2つの行が「同じ」を実行していることは100%正確ではありません。2番目の場合、左側が1回だけ評価されるため、より効率的です
the_nuts

7

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



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.