Как насчет использования нескольких вложенных троичных операторов?
Для меня это самый простой способ справиться с вашей проблемой. А поскольку вы можете использовать вложенные тернарные операторы, вы сможете добавить больше проверок, если это необходимо.
$var = isset($var) ? $var : ($i=check1()) ? $i : ($i=check2()) ? $i : "default" ;
Это почти такой же объем кода, и он должен работать .. если я не понял вас. Если это так, извините.
По сравнению с исходным кодом, который вы разместили в качестве примера, длина практически одинакова:
$result = null; $result ||= check1(); $result ||= check2(); $result ||= "default";
- vs -
$var = isset($var) ? $var : ($i=check1()) ? $i : ($i=check2()) ? $i : "default" ;
Вложенные троичные операторы могут быть немного запутанными, поэтому здесь у вас есть это с комментариями:
// Is $var set?
$var = isset($var) ?
// TRUE: It is, use $var
$var :
// FALSE: $var is not set, run check1
( $i=check1() ) ?
// TRUE: the function check1 returned valid data
$i :
// FALSE: the function check1 returned null or false, run check2
($i=check2()) ?
// TRUE: the function check2 returned valid data
$i :
// FALSE: the function check1 returned null or false, set default value
"default" ;