根據PHP文件中,空合併運算符??
是右結合的右結合,即PHP的空聚結運營商
$a ?? $b ?? $c
相當於
$a ?? ($b ?? $c)
這樣做有什麼意義呢?對於開發者來說,它是左聯合還是右聯合對於它們有什麼不同?
那些誰以爲它會調用較少的功能,這是不正確的,因爲如果左操作數根據我的測試是不是空的正確操作將不進行評估:
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"
如果'$了','$ B'和'$ C'是函數,則這將導致完全不同的執行,如果它是左或右聯合作爲一個簡單的例子。如果你使用''''以外的其他操作符,那麼同樣的事情會發生,這取決於代碼執行完全不同的「關聯性」。 – Rizier123
@ Rizier123現在呢? https://開頭3v4l。org/PvvSr – deceze
FWIW,我想不出任何一個左連接的'??'操作符與疊加的'??'操作符結合產生不同結果的情況。它似乎只與內部短路有關;即一個左結合的「??」運算符總是會評估所有堆棧表達式(即使不是它們的操作數),而不是儘快返回。不過,您可能會發現將其與其他運營商結合的不同行爲 – deceze