Anhand der Beispiele auf dieser Seite habe ich die folgenden Beispiele für funktionierenden und nicht funktionierenden Code.
Arbeitscode mit if
Anweisung:
if (!empty($address['street2'])) echo $address['street2'].'<br />';
Nicht funktionierender Code mit ternärem Operator:
$test = (empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
// Also tested this
(empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
UPDATE
Nach Brians Tipp stellte ich fest, dass das Echo $test
das erwartete Ergebnis ausgibt. Das Folgende wirkt wie ein Zauber!
echo (empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />';
Antworten:
Das
Die Syntax ist kein "Shorthand If" -Operator (der
?
als bedingter Operator bezeichnet wird), da Sie Code nicht auf die gleiche Weise ausführen können, als ob Sie Folgendes getan hätten:In Ihrem Beispiel führen Sie die
echo
Anweisung aus, wenn die$address
nicht leer ist. Mit dem bedingten Operator können Sie dies nicht auf die gleiche Weise tun. Was Sie jedoch tun können, istecho
das Ergebnis des bedingten Operators:und dies zeigt "Straße ist leer!" Wenn es leer ist, wird andernfalls die Adresse street2 angezeigt.
quelle
condition ?: false
was bewertet,condition
ob es wahr ist?PHP 7+
Ab PHP 7 kann diese Aufgabe einfach mit dem Null-Koaleszenzoperator wie folgt ausgeführt werden :
echo !empty($address['street2']) ?? 'Empty';
quelle
$address['street2']
es sich um eine leere Zeichenfolge handelt. Es wird es akzeptieren und nicht zurückkehren'Empty'
.isset() != empty()
. Dies wird nur funktionieren, wenn der Wertnull
$address['street2']
nicht leer ist?echo $address['street2'] ?? 'Empty';
Wie bereits erwähnt, handelt es sich jedoch um den „ Null- Koaleszenz-Operator“, sodass nur auf Null und nicht auf Leer geprüft wird. Das ist weil ?? Ist effektiv eine Abkürzung für isset ().Grundlegende Erklärung zu Richtig / Falsch
Bedingte Begrüßungsnachricht
Nachricht über bedingte Elemente
ref: https://davidwalsh.name/php-ternary-examples
quelle
)
ist verlegt. Es sollte vor dem?
. Die vollständige Erklärung sollte$is_admin = ($user['permissions'] == 'admin') ? true : false;
Der ternäre Operator ist nur eine Abkürzung für und if / else-Block. Ihr Arbeitscode hat keine else-Bedingung und ist daher nicht dafür geeignet.
Das folgende Beispiel funktioniert:
quelle
Es ist der ternäre Operator, auch bekannt als Elvis-Operator (google it: P), den Sie suchen.
Es gibt den Wert der Variablen oder den Standardwert zurück, wenn die Variable leer ist.
quelle
Beachten Sie, dass Sie bei Verwendung verschachtelter bedingter Operatoren möglicherweise Klammern verwenden möchten , um mögliche Probleme zu vermeiden!
Es sieht so aus, als ob PHP nicht so funktioniert wie mindestens Javascript oder C #.
Der gleiche Code in Javascript und C # gibt in beiden Fällen "Außergewöhnlich" zurück.
Im zweiten Fall macht PHP (oder zumindest verstehe ich das):
$score > 10
? Ja$age > 10
? nein, also der Strom$age > 10 ? 'Average' : 'Exceptional'
gibt also "Außergewöhnlich" zurück.'Exceptional' ? 'Horrible' : 'Average'
"Horrible" zurückgeben, da "Exceptional" wahr istAus der Dokumentation: http://php.net/manual/en/language.operators.comparison.php
quelle
Schneller und kurzer Weg:
Hier sind einige interessante Beispiele mit einer oder mehreren unterschiedlichen Bedingungen.
quelle
Bedingte Begrüßungsnachricht
Verschachtelte PHP-Kurzschrift
quelle
Sie können diese sogar noch kürzer machen durch den Ersatz
echo
mit<?= code ?>
<?=(empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />'?>
Dies ist insbesondere dann nützlich, wenn Sie in einer Navigationsleiste festlegen möchten, ob die Menüoption als bereits besucht (angeklickt) angezeigt werden soll oder nicht:
<li<?=($basename=='index.php' ? ' class="active"' : '')?>><a href="index.php">Home</a></li>
quelle
Ich denke, Sie haben die Klammern falsch verwendet. Versuche dies:
Ich denke es sollte funktionieren, du kannst auch verwenden:
quelle
Ich denke, Sie sollten wahrscheinlich keinen ternären Operator in PHP verwenden. Betrachten Sie das nächste Beispiel:
Wie denkst du, welche
$a
Variable wird enthalten? (Hinweis: dos) Und es bleibt gleich, auch wenn die$foo
Variable 2 zugewiesen wird.Um die Dinge besser zu machen, sollten Sie entweder die Verwendung dieses Operators ablehnen oder das rechte Teil folgendermaßen mit Klammern umgeben:
quelle
Ternary Operator ist im Grunde eine Abkürzung für if / else-Anweisung. Wir können damit nur wenige Codezeilen reduzieren und die Lesbarkeit verbessern.
Ihr Code sieht für mich sauberer aus. Aber wir können wie folgt sauberer vorgehen:
$test = (empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
Ein anderer Weg-
$test = ((empty($address['street2'])) ? 'Yes <br />' : 'No <br />');
Hinweis: Ich habe dem gesamten Ausdruck eine Klammer hinzugefügt, um ihn sauberer zu machen. Normalerweise habe ich dies getan, um die Lesbarkeit zu verbessern. Mit PHP7 können wir Null Coalescing Operator / PHP 7 verwenden? Betreiber für eine bessere Annäherung. Aber Ihre Anforderung passt nicht.
quelle
Es gibt auch einen ternären Kurzoperator, der folgendermaßen aussieht:
(Ausdruck1) ?: Ausdruck2 gibt Ausdruck1 zurück, wenn er als wahr ausgewertet wird, oder Ausdruck2 andernfalls.
Beispiel:
wird zurückkehren
Aus dem PHP-Handbuch
quelle