Null合体演算子(Null Coalescing)と三項演算子の短縮形(Short-ternary )を使ってパニクったので整理。
<?php $a[0]??null #-> この値を知りたい。
値 | 比較 | 結果 |
---|---|---|
unset($a) | $a[0] ?? null | NULL |
$a = null | $a[0] ?? null | NULL |
$a = | $a[0] ?? null | NULL |
$a = ['x'] | $a[0] ?? null | 'x' |
$a = 'abc' | $a[0] ?? null | 'a' |
$a = '' | $a[0] ?? null | NULL |
$a = ['x'] | $a[0] ?: null | 'x' |
更に、細かく調査した結果。
値 | 比較 | 結果 |
---|---|---|
unset($a) | $a | NULL |
unset($a) | $a ?? null | NULL |
unset($a) | $a[0] ?? null | NULL |
$a = null | $a | NULL |
$a = null | $a ?? null | NULL |
$a = null | $a[0] ?? null | NULL |
$a = | $a | |
$a = | $a ?? null | |
$a = | $a[0] ?? null | NULL |
$a = ['x'] | $a | ['x'] |
$a = ['x'] | $a ?? null | ['x'] |
$a = ['x'] | $a[0] ?? null | 'x' |
$a = 'abc' | $a | 'abc' |
$a = 'abc' | $a ?? null | 'abc' |
$a = 'abc' | $a[0] ?? null | 'a' |
$a = '' | $a | '' |
$a = '' | $a ?? null | '' |
$a = '' | $a[0] ?? null | NULL |
$a = ['x'] | $a ?: null | ['x'] |
$a = ['x'] | $a[0] ?: null | 'x' |
更にオブジェクトについても見ておく
値 | 比較 | 結果 |
---|---|---|
$a = null | $a->id?? null | NULL |
$a = [] | $a->id?? null | NULL |
$a = 'x' | $a->id?? null | NULL |
$a = '' | $a->id?? null | NULL |
unset($a) | $a->id?? null | NULL |
特にイメージが湧かないのが、次の場合で。
<?php $a = []; $a[0]??null #=>null $a = null; $a[0]??null #=>null
ミスってしまいがちなのが、次のように順番をミス。
<? //Trying to access array offset on value of type null $a??$a[0]; // Error.
正しくは次のように書く。
<?php $a[0]??$a; // $a が返される。
配列をAPIで返されるときに、適当にアクセスしたらNULLが山盛りになってパニクった。