2
0

【PHP】Null合体演算子とNull合体代入演算子ってなに?

Posted at

はじめに

今回は、Null合体演算子とNull合体代入演算子について、まとめました。

※おことわり※
基本的に学習内容のアウトプットです。
初学者であるため、間違い等あればご指摘いただけますと嬉しいです。

この記事の目的

Null合体演算子 ?? を調べていると、Null合体代入演算子 ??= を知ったため、アウトプットします。

この記事の対象者

  • PHPを学習されている初学者の方
  • ?? って何?となっている方

この記事の内容

  1. ?? Null合体演算子(Null coalescing operator)
  2. ??= Null合体代入演算子(Null coalescing assignment operator)
  3. 挙動の確認

1. ?? Null合体演算子(Null coalescing operator)

三項演算子やif文を短縮して書くことができます。

  • 式であるため、return で参照返しするときは注意
  • 演算子の優先順位が低いため、組み合わせで使う時は注意
  • ネストで使用することができる
// 書き方
変数 = 対象 ?? 初期値; 

// 上記と同様の三項演算子
変数 = isset(対象) ? 対象 : 初期値; 

// 上記と同様のif文
if (isset(対象)) {
  変数 = 対象;
} else {
  変数 = 初期値;
}

// ネスト
$a = null;
$b;
$c = 0;
$d = 1;
var_dump($a ?? $b ?? $c ?? $d); // => 0

2. ??= Null合体代入演算子(Null coalescing assignment operator)

式の中の値を使用し、その値をその式の結果とすることができます。

  • Null合体演算子と同一の結果になる
// 書き方
対象 ??= 初期値;

// 上記と同様
対象 = 対象 ?? 初期値; 

3. 挙動の確認

$value_1 = 1;
$a = $value_1 ?? '初期値';
$value_1 ??= '初期値';
var_dump($a);       // => 1
var_dump($value_1); // => 1

$value_2 = 0;
$a = $value_2 ?? '初期値';
$value_2 ??= '初期値';
var_dump($a);       // => 0
var_dump($value_2); // => 0

$value_3 = "0";
$a = $value_3 ?? '初期値';
$value_3 ??= '初期値';
var_dump($a);       // => "0"
var_dump($value_3); // => "0"

$value_4 = "";
$a = $value_4 ?? '初期値';
$value_4 ??= '初期値';
var_dump($a);       // => ""
var_dump($value_4); // => ""

$value_5 = null;
$a = $value_5 ?? '初期値';
$value_5 ??= '初期値';
var_dump($a);       // => "初期値"
var_dump($value_5); // => "初期値"

$value_6;
$a = $value_6 ?? '初期値';
$value_6 ??= '初期値';
var_dump($a);       // => "初期値"
var_dump($value_6); // => "初期値"

$array_1 = [];
$a = $array_1 ?? '初期値';
$array_1 ??= '初期値';
var_dump($a);       // => []
var_dump($array_1); // => []

$array_2 = [0];
$a = $array_2 ?? '初期値';
$array_2 ??= '初期値';
var_dump($a);       // => [0]
var_dump($array_2); // => [0]
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0