Pergunta

Estou tentando definir um sinalizador para mostrar ou ocultar um elemento da página, mas ele sempre é exibido mesmo quando a expressão é falsa.

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

E aí?

Foi útil?

Solução

Isso está quebrado porque 'false' como uma string será avaliado como verdadeiro como um booleano.

No entanto, esta é uma expressão ternária desnecessária, porque os valores resultantes são simples verdadeiros e falsos.Isso seria equivalente:

$canMerge = ($condition1 && $condition2);

Outras dicas

O valor de 'falso' é verdadeiro.Você precisa remover as aspas:

$canMerge = ($condition1 && $condition2) ? true : false;

Parece-me uma pergunta razoável, especialmente por causa da discrepância na forma como o PHP funciona.

Por exemplo, o código a seguir produzirá 'its false'

$a = '0';

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

então

if ($canMerge){
    echo "Stuff";
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top