PHPのドキュメントによると、null合体演算子??
は右結合であるの右結合性、すなわちPHPのnull合体演算子
$a ?? $b ?? $c
が
$a ?? ($b ?? $c)
これの意味は何に相当しているのですか?それが左結合または右結合であることを、開発者のためのすべての違いを作るのか?
左オペランドが私のテストによるとnullでない場合、右オペランドは評価されませんので、それはあまり関数を呼び出します考えている人には、これは真実ではありません。
function f(string $a) : string {
echo "f($a)\n";
return $a;
}
var_dump(f("a") ?? f("b") ?? f("c") ?? f("d"));
echo "===\n";
var_dump(((f("a") ?? f("b")) ?? f("c")) ?? f("d"));
出力:
f(a)
string(1) "a"
===
f(a)
string(1) "a"
'$のA'、' $のB'と '$のC 'は、機能だろう場合は、それが残っているならば、これは全く別の実行につながりますまたは単純な例として右結合的である。あなたが '' ??に追加の異なる演算子を使用する場合は、同じことが、コードは完全に別の実行「associativeness」に応じて起こります。 – Rizier123
Rizier123は今それでしょうか@? https:// 3v4l。org/PvvSr – deceze
FWIW、私は左の連想の '?? '演算子が積み重ねられた' ??'演算子と組み合わせて異なる結果を生成することは考えられません。それは内部短絡に関連するようにしか見えない。つまり、左結合式の '?? '演算子は、できるだけ早く戻すのではなく、(オペランドでなくても)スタックされたすべての式を常に評価します。あなたは他の演算子と組み合わせて別の動作を見つけるかもしれません。 – deceze