Pourquoi mon expression ternaire ne fonctionne-t-elle pas?

J'essaye de placer un drapeau pour montrer ou cacher un élément de page, mais il affiche toujours même quand l'expression est fausse.

$canMerge = ($condition1 && $condition2) ? 'true' : 'false';
...
<?php if ($canMerge) { ?>Stuff<?php } ?>

Quoi de neuf?

0

4 Réponses

La valeur de 'false' est vraie. Vous devez supprimer les guillemets:

$canMerge = ($condition1 && $condition2) ? true : false;
0
ajouté
Merci pour vos commentaires Orlando et Ed. Ce fut un problème qui m'a attrapé et je l'ai posté pour le bénéfice de la mienne et de l'autre. Répondre à vos propres questions est parfaitement adapté à la FAQ. Peut-être que tu devrais aller le relire si ça fait un moment ...
ajouté l'auteur Polsonby, source
Cela semble tellement une tentative de réputation-agriculture. Un utilisateur de 3k-rep qui ne peut pas faire la différence entre une chaîne et un booléen, qui répond à sa question une minute après l'avoir fait?
ajouté l'auteur moo, source

Ceci est cassé parce que 'false' en tant que chaîne va évaluer à vrai comme un booléen.

Cependant, il s'agit d'une expression ternaire inutile, car les valeurs résultantes sont simples, vraies et fausses. Ce serait équivalent:

$canMerge = ($condition1 && $condition2);
0
ajouté

Cela me semble une question raisonnable surtout à cause de la différence de fonctionnement de PHP.

Par exemple, le code suivant affichera 'its false'

$a = '0';

if($a)
{
    echo 'its true';
}
else
{
    echo 'its false';
}
0
ajouté
$canMerge = ($condition1 && $condition2);

puis

if ($canMerge){
    echo "Stuff";
}
0
ajouté
Cela n'explique pas quel est le problème, ce que le PO a demandé.
ajouté l'auteur Wai Ha Lee, source