ベストアンサー1
Elvisは
?:
最初の引数に「真っぽい」値が含まれている場合(true
最初の行でどの値が大まかに等しいとみなされるかを確認してください)を返します。== による緩い比較表)。または、そうでない場合は2番目の引数$result = $var ?: 'default'; // is a shorthand for $result = $var ? $var : 'default';
Null結合は、
??
最初の引数が設定されていない場合はそれを返しますnull
。そうでない場合は2番目の引数を返します。$result = $var ?? 'default'; // is a shorthand for $result = isset($var) ? $var : 'default';
E_NOTICE
最初の引数がnullの場合、null結合は未定義の変数がある場合に出力されない点を除いて基本的に同じです。PHP 7.0 移行ドキュメントこう言っています。
ヌル合体演算子 (??) は、isset() と組み合わせて三項演算子を使用する必要がある一般的なケースに対する構文糖として追加されました。この演算子は、最初のオペランドが存在し、NULL でない場合はその最初のオペランドを返し、そうでない場合は 2 番目のオペランドを返します。
これを示すサンプルコードを次に示します。
<?php
$a = null;
print $a ?? 'b'; // b
print "\n";
print $a ?: 'b'; // b
print "\n";
print $c ?? 'a'; // a
print "\n";
print $c ?: 'a'; // Notice: Undefined variable: c in /in/apAIb on line 14
print "\n";
$b = array('a' => null);
print $b['a'] ?? 'd'; // d
print "\n";
print $b['a'] ?: 'd'; // d
print "\n";
print $b['c'] ?? 'e'; // e
print "\n";
print $b['c'] ?: 'e'; // Notice: Undefined index: c in /in/apAIb on line 33
print "\n";
通知がある行は、null 合体演算子ではなく、短縮形の三項演算子を使用している行です。ただし、通知があっても、PHP は同じ応答を返します。
コードを実行します:https://3v4l.org/McavC
もちろん、これは常に最初の引数が であるnull
と仮定しています。それがnullでなくなると、演算子??
は常に最初の引数を返しますが、?:
省略形は最初の引数が真の場合のみ返します。これは、PHPはブール値に型キャストする。
それで:
$a = false ?? 'f'; // false
$b = false ?: 'g'; // 'g'
$a
は に等しくfalse
、$b
に等しくなります'g'
。