Frage

Basierend auf den Beispielen auf dieser Seite , habe ich die Arbeit und nicht -Arbeiten Codebeispiele unten.

Arbeitscode if Anweisung:

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

Nicht funktionierende Code ternären Operator:

$test = (empty($address['street2'])) ? 'Yes <br />' : 'No <br />';

// Also tested this
(empty($address['street2'])) ? 'Yes <br />' : 'No <br />';

UPDATE
Nach Brians Spitze fand ich, dass Echo $test das erwartete Ergebnis ausgibt. Die folgenden Arbeiten wie ein Charme!

echo (empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />';
War es hilfreich?

Lösung

Das

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

Syntax ist kein „Stenografie wenn“ Operator (die ? der bedingte Operator genannt wird), weil Sie nicht Code auf die gleiche Art und Weise ausgeführt werden kann, als ob Sie haben:

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

In Ihrem Beispiel Sie die Ausführung der echo Anweisung, wenn die $address nicht leer ist. Sie können dies auf die gleiche Weise mit dem Bedingungsoperator nicht. Was man jedoch tun, ist das Ergebnis des Bedingungsoperators echo:

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

und dies zeigt „Straße ist leer!“ wenn es leer ist, sonst wird es die STREET2 Adresse angezeigt werden soll.

Andere Tipps

PHP 7 +

Ab PHP 7 kann diese Aufgabe einfach durchgeführt werden, indem die Null Koaleszierstruktur Operator wie folgt aus:

echo !empty($address['street2']) ?? 'Empty';

Grund Wahr / Falsch Erklärung

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

Conditional Welcome Message

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

Bedingte Artikel Nachricht

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. Ihre Arbeits Code keinen anderen Zustand hat, so dass für diese nicht geeignet ist.

Das folgende Beispiel funktioniert:

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

Es ist der Ternary Operator a.k.a Elvis-Operator (google it: P) die Sie suchen.

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

Es gibt den Wert der Variablen oder Standard, wenn die Variable leer ist.

Beachten Sie, dass , wenn verschachtelte bedingte Operatoren, können Sie Klammern verwenden mögliche Probleme zu vermeiden!

Es sieht aus wie PHP nicht die gleiche Art und Weise arbeitet, 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');

Der gleiche Code in Javascript und C # return "Exceptional" in beiden Fällen.

Im zweiten Fall, was PHP tut, ist (oder zumindest das ist, was ich verstehe):

  1. ist $score > 10? ja
  2. ist $age > 10? nein, so der aktuellen $age > 10 ? 'Average' : 'Exceptional' zurückkehrt 'außergewöhnlich'
  3. dann, statt nur die ganze Aussage zu stoppen und die Rückkehr ‚außergewöhnlich‘, es setzt die nächste Anweisung Auswertung
  4. die nächste Anweisung wird 'Exceptional' ? 'Horrible' : 'Average' die 'Horrible', wie 'außergewöhnlich' ist truthy
  5. zurück

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

  

Es wird empfohlen, dass Sie „Stapel“ ternäre Ausdrücke zu vermeiden. PHP   Verhalten, wenn mehr als ein ternären Operator in einem einzigen mit   Aussage ist nicht offensichtlich.

Conditional Welcome Message

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

Nested PHP Stenografie

echo 'Your score is:  '.($score > 10 ? ($age > 10 ? 'Average' : 'Exceptional') : ($age > 10 ? 'Horrible' : 'Average') );

Sie können dies tun, noch kürzer durch echo mit <?= code ?> ersetzen

<?=(empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />'?>

Dies ist besonders nützlich, wenn Sie feststellen möchten, in einer Navigationsleiste, ob die Menüoption angezeigt werden soll, wie bereits besucht (geklickt) oder nicht:

<li<?=($basename=='index.php' ? ' class="active"' : '')?>><a href="index.php">Home</a></li>

Hier sind einige interessante Beispiele, mit einem oder mehreren verschiedenen 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>";

Ich glaube, Sie die Klammern in die falsche Art und Weise verwendet. Versuchen Sie folgendes:

$test = (empty($address['street2']) ? 'Yes <br />' : 'No <br />');

Ich denke, es sollte funktionieren, können Sie auch:

echo (empty($address['street2']) ? 'Yes <br />' : 'No <br />');

Es gibt auch eine Abkürzung ternäre Operator und es sieht wie folgt aus:

(expression1): expression2 kehrt expression1 , wenn es den Wert true oder expression2 sonst

.

Beispiel:

$a = 'Apples';
echo ($a ?: 'Oranges') . ' are great!';

wird wieder

Apples are great!
  

Seit PHP 5.3 ist es möglich, den mittleren Teil der auszulassen   ternärer Operator. Ausdruck expr1: expr3 kehrt expr1 wenn expr1   ergibt TRUE, und expr3 sonst.

Von der PHP Manual

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top