Basé sur les exemples à partir de cette page , j'ai les exemples de code de travail et de non-travail ci-dessous.
Code de travail utilisant l'instruction if
:
if (!empty($address['street2'])) echo $address['street2'].'<br />';
Code non fonctionnel utilisant un opérateur ternaire:
$test = (empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
// Also tested this
(empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
[~ # ~] met à jour [~ # ~]
Après le conseil de Brian, j'ai constaté que l'écho de $test
Donnait le résultat attendu. Ce qui suit fonctionne comme un charme!
echo (empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />';
Le
(condition) ? /* value to return if condition is true */
: /* value to return if condition is false */ ;
la syntaxe n'est pas un opérateur "sténo si" (le ?
est appelé l'opérateur conditionnel) car vous ne pouvez pas exécuter de code de la même manière que si vous le faisiez:
if (condition) {
/* condition is true, do something like echo */
}
else {
/* condition is false, do something else */
}
Dans votre exemple, vous exécutez l'instruction echo
lorsque la commande $address
n'est pas vide. Vous ne pouvez pas faire cela de la même manière avec l'opérateur conditionnel. Ce que vous pouvez faire cependant, c'est echo
le résultat de l'opérateur conditionnel:
echo empty($address['street2']) ? "Street2 is empty!" : $address['street2'];
et ceci affichera "La rue est vide!" s'il est vide, sinon il affichera l'adresse street2.
A partir de PHP 7, cette tâche peut être effectuée simplement en utilisant le opérateur de coalescence nul comme ceci:
echo !empty($address['street2']) ?? 'Empty';
Déclaration de base vraie/fausse
$is_admin = ($user['permissions'] == 'admin' ? true : false);
Message de bienvenue conditionnel
echo 'Welcome '.($user['is_logged_in'] ? $user['first_name'] : 'Guest').'!';
Message d'éléments conditionnels
echo 'Your cart contains '.$num_items.' item'.($num_items != 1 ? 's' : '').'.';
L'opérateur ternaire n'est qu'un raccourci pour le bloc et si/autre. Votre code de travail n'a pas d'autre condition, donc ne convient pas pour cela.
L'exemple suivant fonctionnera:
echo empty($address['street2']) ? 'empty' : 'not empty';
C'est l'opérateur ternaire a.k.a Elvis (google it: P) que vous recherchez.
echo $address['street2'] ?: 'Empty';
Il retourne la valeur de la variable ou default si la variable est vide.
Notez que lorsque vous utilisez des opérateurs conditionnels imbriqués, vous pouvez utiliser des parenthèses pour éviter tout problème éventuel!
Cela ressemble à PHP ne fonctionne pas de la même façon qu'au moins Javascript ou 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');
Le même code en Javascript et en C # renvoie "Exceptionnel" dans les deux cas.
Dans le second cas, ce que PHP fait est (ou du moins c'est ce que j'ai compris):
$score > 10
? Oui$age > 10
? non, donc le courant $age > 10 ? 'Average' : 'Exceptional'
retourne 'Exceptionnel''Exceptional' ? 'Horrible' : 'Average'
qui retourne 'Horrible', comme 'Exceptionnel' est la véritéDe la documentation: http://php.net/manual/en/language.operators.comparison.php
Il est recommandé d'éviter "d'empiler" les expressions ternaires. Le comportement de PHP lors de l'utilisation de plusieurs opérateurs ternaires dans une même instruction n'est pas évident.
Vous pouvez le faire encore plus rapidement en remplaçant echo
par <?= code ?>
<?=(empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />'?>
Ceci est particulièrement utile lorsque vous souhaitez déterminer, dans une barre de navigation, si l'option de menu doit être affichée comme déjà visitée (sur laquelle vous avez cliqué) ou non:
<li<?=($basename=='index.php' ? ' class="active"' : '')?>><a href="index.php">Home</a></li>
Voici quelques exemples intéressants, avec une ou plusieurs conditions variées.
$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>";
Message de bienvenue conditionnel
echo 'Welcome '.($user['is_logged_in'] ? $user['first_name'] : 'Guest').'!';
imbriqué PHP sténographie
echo 'Your score is: '.($score > 10 ? ($age > 10 ? 'Average' : 'Exceptional') : ($age > 10 ? 'Horrible' : 'Average') );
Je pense que vous avez utilisé les crochets dans le mauvais sens. Essaye ça:
$test = (empty($address['street2']) ? 'Yes <br />' : 'No <br />');
Je pense que ça devrait marcher, vous pouvez aussi utiliser:
echo (empty($address['street2']) ? 'Yes <br />' : 'No <br />');