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
Du musst angemeldet sein, um einen Kommentar abzugeben.
PHP 5.3 eingeführt, eine neue syntax zu lösen genau dieses problem:
Sehen die Dokumentation:
InformationsquelleAutor der Antwort meagar
Können Sie aktualisieren SomeClass:bigQuery (), um wieder eine neue EmptySet() statt false?
Dann müssen Sie nur noch
InformationsquelleAutor der Antwort Jeff Davis
Eine leichte variation Ihrer letzten option:
$foo = SomeClass::bigQuery() oder new EmptySet();das nicht eigentlich funktionieren, vielen Dank für bemerken.Verwendet, oft in Kombination mit mySQL-code, scheint aber immer wieder in vergleichbaren Situationen:
Obwohl ich persönlich lieber eine, die Sie bereits erwähnt:
InformationsquelleAutor der Antwort ontrack
Revision zwei -, Kredit - @meagar
InformationsquelleAutor der Antwort Jonah