Für den sehr häufigen Fall eines Wertes einer Variablen zugewiesen, basierend auf dem Ergebnis eines Ausdrucks ich ein Fan von ternären Operatoren bin:Bedingte Zuweisung PHP-Werte
$foo = $bar ? $a : b;
Wenn jedoch $ bar ein relativ ist teure Operation, und ich möchte das Ergebnis von $ bar zu $ foo zuweisen, wenn das Ergebnis truthy ist, ist dies ineffizient:
$foo = SomeClass::bigQuery() ? SomeClass::bigQuery() : new EmptySet();
Eine Option ist:
$foo = ($result = SomeClass::bigQuery()) ? $result : new EmptySet();
Aber ich würde lieber nicht die extra $result
im Speicher sitzen haben.
Die beste Option, die ich habe ist:
$foo = ($foo = SomeClass::bigQuery()) ? $foo : new EmptySet();
Oder ohne ternären Operatoren:
if(!$foo = SomeClass::bigQuery()) $foo = new EmptySet();
Oder, wenn Programmablauf Betreiber sind nicht Ihr Stil:
($foo = SomeClass::bigQuery()) || ($foo = new EmptySet());
So viele Optionen, keine davon wirklich zufriedenstellend. Was würdest du benutzen, und mir fehlt hier etwas wirklich Offensichtliches?
Ich vermeide persönlich PHP 5.3-only-Syntax , und bevorzuge '$ x = teuer(); ob (!$ x) $ x = $ default; ' – meagar
Wow; Ich wollte nur kommentieren mit "PHP benötigt die [GNU-Erweiterung für ternaries] (http://stackoverflow.com/questions/3319075/ternary-conditional-operator-behaviour-when-leaving-one-expression-empty)" –
ah ha - das habe ich im Handbuch verpasst. Ich nehme an, dass es keine bessere Methode für 5.2.x gibt (die ich mittelfristig unterstützen muss)? – Hamish