Согласно PHP документации, нулевой оператор коалесцирующий ??
является правоассоциативной, т.е.правой ассоциативности нулевого Coalesce оператора РНР
$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"
Если '$ a',' $ b' и '$ c' бы функции, то это приведет к совершенно различным казням, если он остается или правым ассоциативным как простой пример. Если вы используете разные операторы, дополнительные для '??', то одно и то же происходит в зависимости от «ассоциативности», код выполняет совершенно разные. – Rizier123
@ Rizier123 Будет ли это сейчас? https: // 3v4l.org/PvvSr – deceze
FWIW, я не могу придумать ни одного случая, когда лево-ассоциативный '' 'оператор мог бы производить разные результаты в сочетании со сложными' '' операторами. Это похоже только на внутреннее короткое замыкание; то есть лево-ассоциативный оператор '' 'всегда будет оценивать все сложенные выражения (даже если не их операнды), а не возвращаться как можно скорее. Однако вы можете найти другое поведение, сочетающее его с другими операторами. – deceze