2013-05-16 13 views
6

Ich weiß, dass Sie eine Variable in einem Zustand wie folgt zuordnen:Assign Variable innerhalb Zustand, wenn wahr

if ($var = $foo)

Allerdings brauche ich nicht etwas in den Zustand selbst zu tun, so bin ich oft links mit leeren Klammern. Kann ich einfach $var zuweisen, wenn $footrue auf andere Weise ist, ohne später etwas anderes zu tun?

Auch kann ich zuweisen $var-$foo wenn $foo ist true aber wenn $foofalse etwas anderes tun ist? Wie:

if ($var = !$foo) { 
    if ($var = !$bar) { 
     //Etc... 
    } 
} 

Grundsätzlich möchte ich mehr Fallbacks/defaults haben.

+0

Ermmmm, komm wieder ....? –

+1

Sie können 'if ($ foo)' verwenden, dies funktioniert, wenn foo wahr ist. –

+0

Sie ordnen "in der Bedingung" nicht zu. Sie vergeben unabhängig vom Wert von $ foo.Wenn Sie also '$ var' nur mit' $ foo' überschreiben wollen, falls '$ foo' * truthy * ist. Sie müssen die Aufgabe verschieben. Oder mache etwas wie 'if ($ foo && $ var = $ foo) {}' obwohl letzteres meiner Meinung nach wirklich schrecklich ist. – Yoshi

Antwort

8

@ Vorschlag chandresh_cool das ist richtig, aber mehrere Möglichkeiten/Fallbacks, damit Sie die ternäre Ausdrücke Nest haben würde:

$var = ($foo == true) ? $foo: 
     ($bar == true) ? $bar: 
     ($fuzz == true) ? $fuzz: 
     $default; 

Hinweis: die ersten 3 Zeilen enden in Doppelpunkten und nicht in Doppelpunkten.

jedoch eine einfachere Lösung ist folgendes zu tun:

$var = ($foo||$bar||$fuzz...); 
+0

Ihre einfachere Lösung ist genau das, wonach ich suche. Es ist kurz, süß und macht, was ich tun muss: setze $ var auf den ersten positiven Wert, den es finden kann. – Jared

+0

Wenn Sie für die erste Option gehen, tun Sie bitte nicht die "== wahr", nur tun "$ var = ($ foo)? $ ....." – Veda

3

Stattdessen können Sie ternären Operator verwenden wie dieses

$var = ($foo == true)?$foo:"put here what you want"; 
+0

Es ist immer noch ein wenig langatmig, aber es funktioniert, also gebe ich Ihnen +1 für Ihre Antwort. – Jared

3

Sie können Werte wie folgt vergeben:

$var = $foo; 

sie innerhalb einer Einstellung if-Anweisung ist auch möglich, wird PHP die resultierende $ var bewerten was du gerade zugewiesen hast.

ich nicht wirklich Ihre Frage, aber man könnte so etwas tun:

if(!($var = $foo)){ 
    //something else. 
} 
+0

Ihr if-Anweisungscode sieht so aus, als würde ich versuchen, aber RobJs Antwort war besser. Ich gebe dir immer noch ein +1 dafür. – Jared

4

Obwohl dies eine sehr alte Post. Fallback-Logik bei Verfälschungswerten kann wie folgt codiert werden.

$var = $foo ?: $bar ?: "default"; 

In diesem Fall, wenn $foo ein gefälschter Wert, der es zurück zu $bar sonst verwendet es fällt $foo (wie falsche, leere String, etc.) ist. Wenn der Balken ein verfälschter Wert ist, wird er auf die Zeichenfolge default zurückgesetzt.

Beachten Sie, dass dies mit gefälschten Werten funktioniert, und nicht nur true.

Beispiel:

$foo = ""; 
$bar = null; 
$var = $foo ?: $bar ?: "default"; 

$var enthält den Text default weil leere Strings und null betrachtet werden "false" Werte.

+0

@jconder - Ich Rollback Ihre Bearbeitung zu dieser Antwort. Leroy sagt "sonst benutzt es' $ foo' ", aber die Bearbeitung, die du gemacht hast, macht das komplett ungültig. Leroy verwendet absichtlich * zwei * ternäre Operatoren (wobei jeder erste Ausdruck leer ist), was 3 mögliche Ergebnisse erlaubt: '$ foo',' $ bar' oder 'default'', anstatt einen einzelnen ternären Operator zu verwenden Das könnte nur 2 mögliche Ergebnisse zurückgeben: '$ bar' oder' 'default''. – HPierce

+0

Ja, du hast Recht, mein Schlechter, ich habe den ganzen Punkt des Posts verpasst. – jconder

+0

Dies macht, wenn Ausdrücke viel sauberer. Ich verwende das, um nach einem benutzerdefinierten Post-Typ in WordPress '$ is_entry = is_singular ('myentry') zu suchen?: Is_post_type_archive ('myentry')?: False;'. Jetzt kann ich 'if ($ is_entry && $ other_condition)' verwenden, um festzustellen, ob die aktuelle Seite zu meinem Post-Typ gehört, ohne dass der if-Ausdruck zu hässlich wird. – iyrin