Для очень распространенного случая присвоения значения переменной на основе результата выражения я являюсь поклонником тройных операторов:
$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());
Так много вариантов, а не их действительно удовлетворительных. Что бы вы использовали, и я пропустил что-то действительно очевидное здесь?