Domanda

In base agli esempi da questa pagina , ho il lavoro e non -Lavorare esempi di codice di seguito.

codice di lavoro istruzione using if:

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

codice non lavoro con operatore ternario:

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

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

Aggiorna
Dopo la punta di Brian, ho scoperto che facendo eco $test emette il risultato atteso. Le seguenti funziona come un fascino!

echo (empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />';
È stato utile?

Soluzione

Il

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

la sintassi non è una "scorciatoia se" operatore (il ? si chiama l'operatore condizionale) perché non è possibile eseguire il codice nella stessa maniera come se hai fatto:

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

Nel tuo esempio, si sta eseguendo la dichiarazione echo quando il $address non è vuota. Non si può fare questo allo stesso modo con l'operatore condizionale. Cosa si può fare comunque, è echo il risultato dell'operatore condizionale:

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

e questo verrà visualizzato "Street è vuoto!" se è vuoto, altrimenti si visualizza l'indirizzo street2.

Altri suggerimenti

PHP + 7

Dalla versione 7, questa operazione può essere eseguita semplicemente utilizzando il operatore null coalescenza in questo modo:

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

Basic Vero / Falso Dichiarazione

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

condizionale messaggio di benvenuto

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

Elementi condizionali Messaggio

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

L'operatore ternario è solo una scorciatoia per se e / blocco else. Il tuo codice di lavoro non ha una condizione di altro, quindi non è adatto per questo.

Il seguente esempio funziona:

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

E 'l'operatore ternario a.k.a operatore Elvis (google: P) che si sta cercando.

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

Si restituisce il valore della variabile o predefinito se la variabile è vuota.

Si noti che quando si utilizza operatori condizionali nidificate, si consiglia di utilizzare le parentesi per evitare possibili problemi!

Sembra che PHP non funziona allo stesso modo come almeno JavaScript o 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');

Lo stesso codice in JavaScript e C # ritorno "eccezionale" in entrambi i casi.

Nel secondo caso, quello che fa PHP è (o almeno questo è quello che ho capito):

  1. è $score > 10? Sì
  2. è $age > 10? no, in modo che il $age > 10 ? 'Average' : 'Exceptional' attuali restituisce 'Eccezionale'
  3. poi, invece di una semplice pausa di tutta la dichiarazione e la restituzione 'eccezionale', prosegue valutando l'istruzione successiva
  4. l'istruzione successiva diventa 'Exceptional' ? 'Horrible' : 'Average' che restituisce 'orribile', come 'eccezionale' è truthy

Dalla documentazione: http://php.net/manual/en/ language.operators.comparison.php

  

Si consiglia di evitare di "stacking" espressioni ternari. PHP di   comportamento quando si utilizza più di un operatore ternario all'interno di una singola   dichiarazione non è ovvia.

condizionale messaggio di benvenuto

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

nidificati PHP Stenografia

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

È possibile farlo ancora più breve, sostituendo echo con <?= code ?>

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

Questo è utile soprattutto quando si vuole determinare, all'interno di una barra di navigazione, se l'opzione di menu deve essere visualizzato come già visitato (clic) oppure no:

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

Ecco alcuni esempi interessanti, con una o più svariate condizioni.

$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>";

Credo che hai usato le staffe nel modo sbagliato. Prova questo:

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

Credo che dovrebbe funzionare, è anche possibile utilizzare:

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

C'è anche un operatore ternario stenografia e sembra che questo:

(espressione1):? Espressione2 tornerà espressione1 se restituisce true o espressione2 altrimenti

.

Esempio:

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

restituirà

Apples are great!
  

Dal PHP 5.3, è possibile lasciare fuori la parte centrale del   operatore ternario. Espressione expr1:? Rendimenti expr3 expr1 se espr1   restituisce true, e expr3 altrimenti.

Da Manuale PHP

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top