Sur la base des exemples de cette page , j'ai les exemples de code fonctionnel et non fonctionnel ci-dessous.
Code de travail utilisant l' if
instruction:
if (!empty($address['street2'])) echo $address['street2'].'<br />';
Code non fonctionnel utilisant l'opérateur ternaire:
$test = (empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
// Also tested this
(empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
MISE À JOUR
Après le conseil de Brian, j'ai trouvé que l'écho $test
produisait le résultat attendu. Ce qui suit fonctionne comme un charme!
echo (empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />';
Réponses:
le
La syntaxe n'est pas un opérateur "raccourci si" (on l'
?
appelle l'opérateur conditionnel) car vous ne pouvez pas exécuter de code de la même manière que si vous l'aviez fait:Dans votre exemple, vous exécutez l'
echo
instruction lorsque le$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'estecho
le résultat de l'opérateur conditionnel:et cela affichera "La rue est vide!" s'il est vide, sinon il affichera l'adresse street2.
la source
condition ?: false
qui évaluecondition
si c'est vrai?PHP 7+
Depuis PHP 7, cette tâche peut être effectuée simplement en utilisant l' opérateur de fusion Null comme ceci:
echo !empty($address['street2']) ?? 'Empty';
la source
$address['street2']
est une chaîne vide. Il l'acceptera et ne reviendra pas'Empty'
.isset() != empty()
. Cela ne fonctionnera que si la valeur estnull
$address['street2']
n'est pas vide?echo $address['street2'] ?? 'Empty';
cependant, comme mentionné, il s'agit de « l' opérateur de fusion nul », donc il ne teste que null et non vide. Ceci est dû au fait ?? Est en fait un raccourci pour isset ().Déclaration de base vrai / faux
Message de bienvenue conditionnel
Message des éléments conditionnels
réf: https://davidwalsh.name/php-ternary-examples
la source
)
est mal placé. Il doit précéder le?
. La déclaration complète devrait être$is_admin = ($user['permissions'] == 'admin') ? true : false;
L'opérateur ternaire est juste un raccourci pour et if / else bloc. Votre code de travail n'a pas de condition else, il n'est donc pas adapté à cela.
L'exemple suivant fonctionnera:
la source
C'est l'opérateur Ternary aka l'opérateur Elvis (google it: P) que vous recherchez.
Il renvoie la valeur de la variable ou par défaut si la variable est vide.
la source
Notez que lorsque vous utilisez des opérateurs conditionnels imbriqués, vous pouvez utiliser des parenthèses pour éviter d'éventuels problèmes!
Il semble que PHP ne fonctionne pas de la même manière qu'au moins Javascript ou C #.
Le même code en Javascript et C # renvoie "Exceptionnel" dans les deux cas.
Dans le 2ème cas, ce que fait PHP (ou du moins c'est ce que je comprends):
$score > 10
? Oui$age > 10
? non, donc le courant$age > 10 ? 'Average' : 'Exceptional'
renvoie 'Exceptionnel''Exceptional' ? 'Horrible' : 'Average'
qui renvoie `` Horrible '', car `` Exceptionnel '' est la véritéDepuis la documentation: http://php.net/manual/en/language.operators.comparison.php
la source
Voie rapide et courte:
Voici quelques exemples intéressants, avec une ou plusieurs conditions variées.
la source
Message de bienvenue conditionnel
Raccourci PHP imbriqué
la source
Vous pouvez le faire encore plus court en le remplaçant
echo
par<?= code ?>
<?=(empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />'?>
Ceci est particulièrement utile lorsque vous souhaitez déterminer, à l'intérieur d'une barre de navigation, si l'option de menu doit être affichée comme déjà visitée (cliquée) ou non:
<li<?=($basename=='index.php' ? ' class="active"' : '')?>><a href="index.php">Home</a></li>
la source
Je pense que vous avez mal utilisé les parenthèses. Essaye ça:
Je pense que cela devrait fonctionner, vous pouvez également utiliser:
la source
Je pense que vous ne devriez probablement pas utiliser d'opérateur ternaire en php. Prenons l'exemple suivant:
Comment pensez-vous, quelle
$a
variable contiendra? (indice: dos) Et cela restera le même même si la$foo
variable sera assignée à 2.Pour améliorer les choses, vous devez soit refuser d'utiliser cet opérateur, soit entourer la partie droite avec des accolades de la manière suivante:
la source
L'opérateur ternaire est essentiellement un raccourci pour l'instruction if / else. Nous pouvons utiliser pour réduire quelques lignes de code et augmenter la lisibilité.
Votre code me paraît plus propre. Mais nous pouvons ajouter une manière plus propre comme suit-
$test = (empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
Autrement-
$test = ((empty($address['street2'])) ? 'Yes <br />' : 'No <br />');
Remarque - J'ai ajouté un crochet à toute l'expression pour la rendre plus propre. J'avais l'habitude de faire cela pour augmenter la lisibilité. Avec PHP7, nous pouvons utiliser Null Coalescing Operator / php 7 ?? opérateur pour une meilleure approche. Mais votre exigence ne correspond pas.
la source
Il y a aussi un opérateur ternaire abrégé et il ressemble à ceci:
(expression1)?: expression2 renverra expression1 si elle est évaluée à vrai ou expression2 cas contraire.
Exemple:
reviendra
À partir du manuel PHP
la source