Bedingt PHP-Werte zuweisen

Für den sehr häufigen Fall der Zuweisung eines Wertes an eine variable auf der Grundlage des Ergebnisses eines Ausdrucks bin ich ein fan von ternären Operatoren:

$foo = $bar ? $a : b;

Allerdings, wenn $bar ist eine relativ teure operation, und ich will weisen Sie das Ergebnis von $bar $foo, wenn das Ergebnis ist truthy, ist dies ineffizient:

$foo = SomeClass::bigQuery() ? SomeClass::bigQuery() : new EmptySet();

Eine option ist:

$foo = ($result = SomeClass::bigQuery()) ? $result : new EmptySet();

Aber ich möchte lieber nicht haben, die extra $result sitzen im Speicher.

Die beste option, die ich habe ist:

$foo = ($foo = SomeClass::bigQuery()) ? $foo : new EmptySet();

Oder ohne ternäre Operatoren:

if(!$foo = SomeClass::bigQuery()) $foo = new EmptySet();

Oder, wenn Programm-Ablauf-Betreiber sind nicht Ihr Stil:

($foo = SomeClass::bigQuery()) || ($foo = new EmptySet());

So viele Optionen, die nicht von Ihnen wirklich zufriedenstellend. Was würden Sie verwenden, und bin ich etwas fehlt offensichtlich wirklich hier?

InformationsquelleAutor der Frage Hamish | 2010-12-01

Schreibe einen Kommentar