3 Stimmen

Wie wird dieses Zuweisungskonstrukt genannt? Und kann man das in Php machen?

Ich habe oft das folgende Konstrukt in Javascript verwendet:

var foo = other_var || "default_value";

In Javascript wird, wenn die linke Seite fehlerhaft ist, der Wert auf der rechten Seite zugewiesen.

Das ist sehr praktisch und erspart das Schreiben längerer und unnötig expliziter ternärer Ausdrücke.

Gibt es einen Namen für diese Art von Konstruktionen?

Bonus: Gibt es einen Trick, dies in Php zu tun, ohne einen ternären Operator zu verwenden?

PS: Eine andere Variante ist es, einen Fehler auszulösen, wenn man keinen korrekten Wert erhält, anstatt einen Standardwert anzugeben:

var foo = something || alert("foo is not set!");

2voto

Kos Punkte 67505

Das Logik-Oder (normalerweise || ) unterscheidet sich in vielen Sprachen drastisch.

In einigen (wie C, C++ ) funktioniert es so: "Werten Sie die linke Seite aus; wenn sie wahr ist, geben Sie true zurück, andernfalls werten Sie die rechte Seite aus und geben Sie true zurück, wenn sie wahr ist, andernfalls false." Das Ergebnis ist hier immer boolesch.

In anderen (wie Javascript, Python Ich glaube, dass PHP auch) es ist mehr wie: "Werten Sie die linke Seite aus; wenn sie wahr ist, geben Sie sie zurück, andernfalls werten Sie die rechte Seite aus und geben das Ergebnis zurück." Dann kann das Ergebnis von beliebigem Typ sein und Sie können Konstrukte wie:

a = (b || c); // equivalent to a = b ? b : c;

oder ziemlich ausgefallen:

function compare(A, B) { // -1 if A<B, 0 if A==B, 1 if A>B
    return B.x - A.x || B.y - A.y;
}

1voto

wajiw Punkte 12035

Ich glaube, man nennt es einfach ein ODER-Konstrukt. Hier gibt es eine Menge guter Beispiele für die Verwendung von Zuweisungen: http://php.net/manual/en/language.operators.assignment.php

1voto

user113716 Punkte 309387

Sie ist nur ein logischer OR-Operator . Folgen Sie dem Link für weitere Informationen in Javascript.

Aus den Beispielen in der Dokumentation:

o1=true || true       // t || t returns true
o2=false || true      // f || t returns true
o3=true || false      // t || f returns true
o4=false || (3 == 4)  // f || f returns false
o5="Cat" || "Dog"     // t || t returns Cat
o6=false || "Cat"     // f || t returns Cat
o7="Cat" || false     // t || f returns Cat

EDIT: Was den BONUS betrifft, so scheint es, als ob man in neueren PHP-Versionen etwas Ähnliches mit der Ternärform machen kann:

expr1 ?: expr3

Aus den PHP-Dokumenten:

Seit PHP 5.3 ist es möglich, den mittleren Teil des ternären Operators wegzulassen. Ausdruck expr1 ?: expr3 gibt zurück. expr1 wenn expr1 wertet aus zu WAHR y expr3 sonst.

Ich kenne mich mit PHP nicht aus, deshalb würde mich das Ergebnis interessieren.

1voto

Evan Mulawski Punkte 53325

Das funktioniert:

$mytruevalue = true;
$foo = $mytruevalue or $foo = "20";
echo $foo;

Die obigen Drucke "1" denn das ist die String-Repräsentation von true ( $mytruevalue wahr ist).

$myfalsevalue = false;
$foo = $myfalsevalue or $foo = "20";
echo $foo;

Dieser druckt jedoch "20" denn $myfalsevalue falsch ist.

Wenn beide Werte gleich sind false wird nichts gedruckt.

Ich hoffe, das hilft.

0voto

Sarfraz Punkte 366217

Gibt es einen Namen für diese Art von Konstrukt?

Sie ist der logische OR-Operator .

Bonus: Gibt es einen Trick, um dies in Php zu tun, ohne einen ternären Operator zu verwenden?

Nein, mit PHP können Sie dies nur mit Hilfe des Ternay-Operators tun.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X