2016-09-15 2 views
2
var foo, bar; 

foo = 'hello'; // first 
bar = 'world'; // otherwise 

var baz = foo || bar; 

console.log(baz); 

Fragen, was ist die PHP-Art, das Obige zu tun? Ich weiß schon, über die ternary Betreiber:Variable mit Bedingung deklarieren

$foo = $bar = ''; 

$foo = 'hello'; // first 
$bar = 'world'; // otherwise 

$baz = $foo ? $foo : $bar; 

echo $baz; 

.. aber ich bin auf der Suche hier zu optimieren, weil die $foo in meinem Fall ist MySQL-Abfrage und ich glaube, die zwei Mal ausgeführt beim Einchecken und dann auf Zuordnung (?). Wie auch immer, ich möchte wissen, ob es eine elegantere DRY-Methode gibt.

Edit:

In PHP7 können Sie tun:

$baz = $foo ?? $bar; 

... aber auf der Suche nach etwas in PHP 5+

Antwort

3

Für diesen speziellen Fall stellt PHP eine ?: Stenografie , die den Zustand nur einmal auswertet:

Aber abgesehen davon ist es funktionell äquivalent zu $foo ? $foo : $bar.

EDIT: $foo ?? $bar ist nur für wenn $foo kann null sein. Dieser Operator ist erst seit PHP 7 verfügbar. ?: ist jedoch seit PHP 5.3 verfügbar. Das Ternärgerät prüft auf false (lose).

+0

Super! Vielen Dank. Entspricht es dem PHP7 '??'? – 3zzy

+2

@ 3zzy siehe meine Bearbeitung. '$ foo = false; $ baz = $ foo ?? "alt"; $ qux = $ foo?: "alt"; 'sind verschieden. Aber für truthy Werte ist es dasselbe. – bwoebi

+0

Ah ha, gut zu wissen. Vielen Dank! Obwohl ich auf PHP7 bin, wollte ich, dass der Code abwärtskompatibel ist. – 3zzy