Для очень распространенного случая присвоения значения переменной на основе результата выражения я фанат троичных операторов:
$foo = $bar ? $a : b;
Однако, если $ bar является относительно дорогой операцией, и я хочу присвоить результат $ bar переменной $ foo, если результат верный, это неэффективно:
$foo = SomeClass::bigQuery() ? SomeClass::bigQuery() : new EmptySet();
Один из вариантов:
$foo = ($result = SomeClass::bigQuery()) ? $result : new EmptySet();
Но я бы предпочел, чтобы в памяти не осталось лишних $result
.
Лучший вариант, который у меня есть:
$foo = ($foo = SomeClass::bigQuery()) ? $foo : new EmptySet();
Или без троичных операторов:
if(!$foo = SomeClass::bigQuery()) $foo = new EmptySet();
Или, если операторы потока программ не в вашем стиле:
($foo = SomeClass::bigQuery()) || ($foo = new EmptySet());
Так много вариантов, ни один из них не является действительно удовлетворительным. Что бы вы использовали, и я что-то упускаю здесь действительно очевидное?