2008-10-02 9 views
24

Mögliche Duplizieren:
PHP equivalent of a Ruby assignment idiomEinstellung Standardwerte (bedingte Zuweisung)

In Ruby Sie einfach einen Standardwert für eine Variable

x ||= "default" 

Die obige Aussage festlegen setzt den Wert von x auf "default", wenn x null oder falsch ist

Gibt es eine ähnliche Abkürzung in PHP oder muss ich die längere Form verwenden:

$x = (isset($x))? $x : "default"; 

Gibt es einfachere Wege, dies in PHP zu behandeln?

+6

Notiz Schließer: dies die besseren schriftliche Anfrage mir scheint, mit besseren Antworten; plus, es ist älter – kdgregory

Antwort

1

Ich denke, Ihre längere Form ist bereits die Abkürzung für PHP ... und ich würde es nicht verwenden, weil es nicht gut ist

Einige Mitteilung zu lesen: Im symfony die meisten der „bekommen „-Methoden haben einen zweiten Parameter einen Standardwert ...

8
isset($x) or $x = 'default'; 
+4

Das wird so lange funktionieren, wie wir falsche Werte von $ x nicht als gesetzt betrachten. –

+0

$ x === false und $ x = 'default'; isset ($ x) oder $ x = 'default'; –

+0

Ich mag die 'isset ($ x) oder $ x = 'default';' version; Sie sollten Ihre Antwort aktualisieren. :-) –

2

ich wickeln sie es in einer Funktion zu definieren:

function default($value, $default) { 
    return $value ? $value : $default; 
} 
// then use it like: 
$x=default($x, 'default'); 

Manche Leute es mögen vielleicht nicht, aber Es hält Ihren Code sauber, wenn Sie einen verrückten Funktionsaufruf machen.

+1

Das "Problem" beim Einbinden in einen Funktionsaufruf ist, dass alle Argumente ausgewertet werden. In a = b || c, c wird nur ausgewertet, wenn b falsch ist. Dies kann oder kann nicht sein, was Sie wollen. – KaptajnKold

+0

Man würde hoffen, dass Sie in einer Aufgabe sowieso keine seitenbeeinflussenden Methoden aufrufen. –

+0

@KaptajnKold Sie können nach ref gehen, dann werden die Argumente nicht ausgewertet;) – NikiC

35

Ab PHP 5.3 können Sie den ternären Operator verwenden, während das mittlere Argument Weglassen:

$x = $x ?: 'default'; 
+1

Warum ist diese Eleganz nicht mehr bekannt? Ich habe generell das Gefühl, dass ich ein nahezu pedantisches Wissen über PHP habe, aber dieses Juwel scheint mir entgangen zu sein. Vielen Dank!! – orca

+0

PHP 5.3 Obwohl. Ich kann nicht warten, dann ist es ein erforderlicher Standard für Wordpress, da ich Wordpress Themes entwickle. Aber das ist ein Badass Ternär-Operator genau dort :) – Norris

+1

Ein Problem mit diesem ist, dass PHP eine Notiz über eine undefinierte Variable werfen kann, und wenn Sie es viel tun, wird es die Ausgabe/Protokolle stöbern, je nachdem, was Sie die Reporting-Ebene gesetzt haben zu. – jerseyboy

Verwandte Themen