Wie ersetze ich die “if”-Anweisung durch einen ternären Operator (? : )?

Lesezeit: 6 Minuten

Wie ersetze ich die if Anweisung durch einen ternaren Operator
Stefan

Anhand der Beispiele von dieser Seiteich wollte das unten umwandeln if Aussage zu einem ternären Operator.

Arbeitscode verwenden if Aussage:

if (!empty($address['street2'])) echo $address['street2'].'<br />';

Ich bin mir nicht sicher, wie dies mit einem ternären Operator geschrieben werden sollte, damit die echo funktioniert nur wenn street2 existiert im Array und ist kein leerer String.

  • Ihre Frage täuscht einige Freiwillige und Forscher, weil Sie keine Aufgabe mit einem ternären Ausdruck in Kurzschrift schreiben (es gibt keinen “Elvis-Operator”) – Sie schreiben einen ternären Ausdruck in Langschrift. Der Unterschied besteht darin, dass Sie beide zurückgegebenen Werte abhängig von der Auswertung deklarieren. Wenn der Eingabewert in einer abgekürzten Auswertung “Wahrheit” ist, wird er zurückgegeben; wenn es “falsey” ist, wird der Fallback-Wert zurückgegeben (dies ist der nach dem Elvis-Operator deklarierte Wert). Auch hier gibt es eine merklich schlechte Implementierung des Null-Coalescing-Operators.

    – mickmackusa

    14. April 2020 um 2:39 Uhr


Die

(condition) ? /* value to return if condition is true */ 
            : /* value to return if condition is false */ ;

Syntax ist kein „Abkürzungs-if“-Operator (die ? wird als Bedingungsoperator bezeichnet), da Sie Code nicht so ausführen können, als ob Sie es getan hätten:

if (condition) {
    /* condition is true, do something like echo */
}
else {
    /* condition is false, do something else */
}

In Ihrem Beispiel führen Sie die aus echo Aussage, wenn die $address ist nicht leer. Mit dem Bedingungsoperator ist dies nicht möglich. Was Sie jedoch tun können, ist echo das Ergebnis des Bedingungsoperators:

echo empty($address['street2']) ? "Street2 is empty!" : $address['street2'];

und dies zeigt “Straße ist leer!” wenn es leer ist, wird andernfalls die Adresse street2 angezeigt.

  • Es ist der Unterschied zwischen Aussage und Ausdruck

    – pmiranda

    9. Mai 2019 um 20:41 Uhr

  • was ist nochmal die Kurzschrift? condition ?: false was sich auswertet condition wenn es wahr ist?

    – alter Junge

    26. Juli 2019 um 6:09 Uhr

  • wie wäre es wenn 3 Bedingung? es funktioniert noch?

    – Leopoldz

    5. März 2021 um 2:57 Uhr

1646903647 216 Wie ersetze ich die if Anweisung durch einen ternaren Operator
Rabin Lama Dong

PHP7+

Ab PHP 7 kann diese Aufgabe einfach mit der durchgeführt werden Null-Koaleszenz-Operator so was :

echo $address['street2'] ?? 'Empty';

  • Nur zur Info, falls $address['street2'] ist ein leerer String. Es wird es akzeptieren und nicht zurückkehren 'Empty'. isset() != empty(). Dies funktioniert nur, wenn der Wert ist null

    – AFwcxx

    31. Juli 2018 um 6:41 Uhr


  • Was ist die Ausgabe, wenn $address['street2'] ist nicht leer?

    – AliN11

    17. Oktober 2019 um 12:36 Uhr

  • Angemeldet, nur um diese Antwort abzulehnen. Das macht überhaupt nicht das, was beworben wird.

    – TKoL

    26. November 2019 um 16:05 Uhr

  • DIESE ANTWORT IST FALSCH! Nachweisen: ideone.com/bLJM55 Es gibt das Ergebnis von wieder !empty($address['street2']) was wahr ist, und PHP’s echo wird dies als drucken 1. Ja, seltsam, aber so ist es.

    – Sliq

    5. August 2021 um 17:30 Uhr


  • empty() NOCH NIE kehrt zurück nulldamit ?? wird niemals das gewünschte Ergebnis liefern. ich absolut HASSEN wenn falsche Antworten den Stack Overflow-Wissenspool vergiften und Forschern nachweislich falsche Ratschläge geben!

    – mickmackusa

    11. August 2021 um 22:52 Uhr


Wie ersetze ich die if Anweisung durch einen ternaren Operator
Arun Yokesh

Grundlegende Wahr/Falsch-Deklaration

$is_admin = ($user['permissions'] == 'admin' ? true : false);

Bedingte Willkommensnachricht

echo 'Welcome '.($user['is_logged_in'] ? $user['first_name'] : 'Guest').'!';

Bedingte Posten Nachricht

echo 'Your cart contains '.$num_items.' item'.($num_items != 1 ? 's' : '').'.';

Referenz: https://davidwalsh.name/php-ternäre-beispiele

  • Sie haben es von der Kurzschrift-Website erhalten und nicht einmal darauf verwiesen

    – Richard

    10. April 2019 um 12:33 Uhr

  • @Richard hat Referenzen hinzugefügt

    – Arun Yokesh

    23. Dezember 2019 um 10:00 Uhr

  • Ist es ? Im Zusammenhang mit StackOverflow ist es immer eine dünne Linie, ich meine, der Q hat nach etwas gefragt, kann es nicht selbst finden, und dann hat jemand anderes diesen Inhalt geliefert. Ist es unfair, vorhandene Inhalte zu kopieren, wenn dies hilfreich ist und diese Frage/Antwort aufwertet? Ich denke, Antworten auf StackOverflow sind nicht “Ihr eigener Inhalt” … hmmm

    – Sliq

    2. Februar 2020 um 17:44 Uhr

  • Das erste Beispiel ist falsch. Die ) ist fehl am Platz. Es sollte dem vorausgehen ?. Die vollständige Aussage sollte sein $is_admin = ($user['permissions'] == 'admin') ? true : false;

    – 1934286

    31. Juli 2020 um 22:00 Uhr


  • Auch völlig nutzlos ohne eine Erläuterung dessen, was die Beispiele tun.

    – Daniel Bengtsson

    17. Januar um 22:46 Uhr

Wie ersetze ich die if Anweisung durch einen ternaren Operator
Tastatur-Ninja

Es ist der ternäre Operator, auch bekannt als Elvis-Operator (google it: P), nach dem Sie suchen.

echo $address['street2'] ?: 'Empty'; 

Es gibt den Wert der Variablen oder den Standardwert zurück, wenn die Variable leer ist.

Der ternäre Operator ist nur eine Abkürzung für und if/else-Block. Ihr Arbeitscode hat keine andere Bedingung und ist daher nicht dafür geeignet.

Folgendes Beispiel funktioniert:

echo empty($address['street2']) ? 'empty' : 'not empty';

Schneller und kurzer Weg:

echo $address['street2'] ? : "No";

Hier sind einige interessante Beispiele mit einer oder mehreren unterschiedlichen Bedingungen.

$color = "blue";

// Example #1 Show color without specifying variable 
echo $color ? : "Undefined";
echo "<br>";

// Example #2
echo $color ? $color : "Undefined";
echo "<br>";

// Example #3
echo ($color) ? $color : "Undefined";
echo "<br>";

// Example #4
echo ($color == "blue") ? $color : "Undefined";
echo "<br>";

// Example #5
echo ($color == "" ? $color : ($color == "blue" ? $color : "Undefined"));
echo "<br>";

// Example #6
echo ($color == "blue" ? $color : ($color == "" ? $color : ($color == "" ? $color : "Undefined")));
echo "<br>";

// Example #7
echo ($color != "") ? ($color != "" ? ($color == "blue" ? $color : "Undefined") : "Undefined") : "Undefined";
echo "<br>";

Update in PHP 7+

// Check if the value exists
echo $_GET['user'] ?? "Undefined"; 
// Before isset($_GET['user']) ? $_GET['user'] : 'undefined';

// Multiple conditions can be added
echo $_GET['user'] ?? $_POST['user'] ?? $color ?? 'Undefined';

1646903648 53 Wie ersetze ich die if Anweisung durch einen ternaren Operator
Benutzer276648

Beachten Sie, dass Wenn Sie verschachtelte bedingte Operatoren verwenden, möchten Sie möglicherweise Klammern verwenden um mögliche Probleme zu vermeiden!

Es sieht so aus, als ob PHP nicht genauso funktioniert wie zumindest Javascript oder C#.

$score = 15;
$age = 5;

// The following will return "Exceptional"
echo 'Your score is: ' . ($score > 10 ? ($age > 10 ? 'Average' : 'Exceptional') : ($age > 10 ? 'Horrible' : 'Average'));

// The following will return "Horrible"
echo 'Your score is: ' . ($score > 10 ? $age > 10 ? 'Average' : 'Exceptional' : $age > 10 ? 'Horrible' : 'Average');

Derselbe Code in Javascript und C# gibt in beiden Fällen „Exceptional“ zurück.

Im zweiten Fall macht PHP Folgendes (oder zumindest verstehe ich das):

  1. ist $score > 10? Jawohl
  2. ist $age > 10? nein, also der strom $age > 10 ? 'Average' : 'Exceptional' gibt ‘Außergewöhnlich’ zurück
  3. Anstatt einfach die gesamte Anweisung zu stoppen und „Exceptional“ zurückzugeben, fährt es mit der Auswertung der nächsten Anweisung fort
  4. die nächste Anweisung wird 'Exceptional' ? 'Horrible' : 'Average' was ‘Horrible’ zurückgibt, da ‘Exceptional’ wahr ist

Aus der Dokumentation: http://php.net/manual/en/language.operators.comparison.php

Es wird empfohlen, das „Stapeln“ von ternären Ausdrücken zu vermeiden. Das Verhalten von PHP bei der Verwendung von mehr als einem ternären Operator innerhalb einer einzelnen Anweisung ist nicht offensichtlich.

987280cookie-checkWie ersetze ich die “if”-Anweisung durch einen ternären Operator (? : )?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy