Basierend auf den Beispielen von 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 fand ich, dass $test
gibt das erwartete Ergebnis aus. Das Folgende wirkt wie ein Zauber!
echo (empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />';
Das
(condition) ? /* value to return if condition is true */
: /* value to return if condition is false */ ;
syntax ist kein "shorthand if" -Operator (der ?
heißt der bedingte Operator), weil Sie Code nicht auf die gleiche Weise ausführen können, wie Sie es getan haben:
if (condition) {
/* condition is true, do something like echo */
}
else {
/* condition is false, do something else */
}
In Ihrem Beispiel führen Sie die Anweisung echo
aus, wenn die Anweisung $address
ist nicht leer. Dies können Sie mit dem bedingten Operator nicht auf die gleiche Weise tun. Was Sie jedoch tun können, ist echo
das Ergebnis des bedingten Operators:
echo empty($address['street2']) ? "Street2 is empty!" : $address['street2'];
und dies wird anzeigen "Straße ist leer!" Wenn es leer ist, wird andernfalls die Adresse street2 angezeigt.
Ab PHP 7 kann diese Aufgabe einfach mit dem Null-Koaleszenz-Operator wie folgt ausgeführt werden:
echo !empty($address['street2']) ?? 'Empty';
Grundlegende Richtig/Falsch-Erklärung
$is_admin = ($user['permissions'] == 'admin' ? true : false);
Bedingte Begrüßung
echo 'Welcome '.($user['is_logged_in'] ? $user['first_name'] : 'Guest').'!';
Nachricht über bedingte Elemente
echo 'Your cart contains '.$num_items.' item'.($num_items != 1 ? 's' : '').'.';
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 wird funktionieren:
echo empty($address['street2']) ? 'empty' : 'not empty';
Es ist der ternäre Operator a.k.a Elvis-Operator (google it: P), den Sie suchen.
echo $address['street2'] ?: 'Empty';
Es gibt den Wert der Variablen oder den Standardwert zurück, wenn die Variable leer ist.
Beachten Sie, dass wenn Sie verschachtelte bedingte Operatoren verwenden, möglicherweise Klammern verwenden möchten, um mögliche Probleme zu vermeiden!
Es sieht so aus, als ob PHP funktioniert nicht so wie mindestens 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 ist das, was PHP tut (oder zumindest das, was ich verstehe):
$score > 10
? Ja$age > 10
? nein, also der aktuelle $age > 10 ? 'Average' : 'Exceptional'
gibt "Außergewöhnlich" zurück'Exceptional' ? 'Horrible' : 'Average'
was 'Horrible' als 'Exceptional' zurückgibt, ist wahrAus der Dokumentation: http://php.net/manual/en/language.operators.comparison.php
Es wird empfohlen, ternäre Ausdrücke nicht zu "stapeln". Das Verhalten von PHP bei der Verwendung von mehr als einem ternären Operator in einer einzelnen Anweisung ist nicht offensichtlich.
Sie können dies noch kürzer machen, indem Sie echo
durch <?= code ?>
Ersetzen.
<?=(empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />'?>
Dies ist besonders 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>
Hier sind einige interessante Beispiele mit einer oder mehreren unterschiedlichen Bedingungen.
$value1 = '1';
$value2 = '2';
$value3 = '3';
// 1 Condition
$v1 = ($value1 == '1') ? TRUE : FALSE;
var_dump($v1);
echo "<br>";
// 2 Conditions
$v2 = ($value1 == '' ? TRUE : ($value2 == '2' ? TRUE : FALSE));
var_dump($v2);
echo "<br>";
// 3 Conditions
$v3 = ($value1 == '' ? TRUE : ($value2 == '' ? TRUE : ($value3 == '3' ? TRUE : FALSE)));
var_dump($v3);
echo "<br>";
// 4 Conditions
$v4 = ($value1 == '1') ? ($value2 == '2' ? ($value3 == '3' ? TRUE : 'FALSE V3') : 'FALSE V2') : 'FALSE V1' ;
var_dump($v4);
echo "<br>";
Bedingte Begrüßung
echo 'Welcome '.($user['is_logged_in'] ? $user['first_name'] : 'Guest').'!';
Verschachtelt PHP Shorthand
echo 'Your score is: '.($score > 10 ? ($age > 10 ? 'Average' : 'Exceptional') : ($age > 10 ? 'Horrible' : 'Average') );
Ich denke, Sie haben die Klammern falsch verwendet. Versuche dies:
$test = (empty($address['street2']) ? 'Yes <br />' : 'No <br />');
Ich denke, es sollte funktionieren, Sie können auch verwenden:
echo (empty($address['street2']) ? 'Yes <br />' : 'No <br />');