Почему мое троичное выражение не работает?

Я пытаюсь установить флаг для отображения или скрытия элемента страницы, но он всегда отображается, даже если выражение является ложным.

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

Что случилось?

4 ответа

  1. Значение ‘false’ равно true. Вам нужно удалить котировки:

    $canMerge = ($condition1 && $condition2) ? true : false;
    
  2. Это нарушено, потому что ‘false’ как строка будет вычисляться как true как логическое значение.

    Однако это ненужное тернарное выражение, поскольку результирующие значения являются простыми true и false. Это было бы эквивалентно:

    $canMerge = ($condition1 && $condition2);
    
  3. Мне кажется разумным вопрос, особенно из-за несоответствия в том, как работает PHP.

    Например, следующий код выведет ‘its false’

    $a = '0';
    
    if($a)
    {
        echo 'its true';
    }
    else
    {
        echo 'its false';
    }