Конструкция if-else и булевы значения

Пусть у нас есть какая-то булева переменная, которая может принимать значения true или false:

<?php $test = true; ?>

Давайте напишем if, проверяющий нашу переменную на значение true:

<?php $test = true; if ($test === true) { echo '+'; } else { echo '-'; } ?>

Проверьте то, что переменная $test равна true.

Проверьте то, что переменная $test равна false.

Логические значения и двойное равно

В предыдущем примере я использовал для сравнения оператор ===. В этом случае наша переменная сравнивалась на равенство true как по значению, так и по типу.

В нашей задаче можно использовать и оператор ==. Если в переменной test всегда будет одно из значений true или false, то ничего и не изменится:

<?php $test = true; // тут пишем или true, или false if ($test == true) { echo '+'; } else { echo '-'; } ?>

А вот если в переменную $test могут попадать любые значения, то все становится намного сложнее. В таком случае, если в переменной будет не булево значение, то это значение вначале будет преобразовано к булеву и только затем будет сравниваться.

Пусть, например, в нашей переменной будет число 1. В этом случае оно вначале преобразуется к логическому типу, то есть к true. И затем будет выполнено сравнение:

<?php $test = 1; if ($test == true) { echo '+'; // сработает это, тк 1 == true - это верно } else { echo '-'; } ?>

А вот, к примеру, число 0 преобразуется к false. И наше условие в результате будет ложным:

<?php $test = 0; if ($test == true) { echo '+'; } else { echo '-'; // сработает это, тк 0 == true - это НЕверно } ?>

Не запуская код, определите, что выведется на экран:

<?php $test = 1; if ($test == true) { echo '+'; } else { echo '-'; } ?>

Не запуская код, определите, что выведется на экран:

<?php $test = 0; if ($test == true) { echo '+'; } else { echo '-'; } ?>

Не запуская код, определите, что выведется на экран:

<?php $test = 1; if ($test == false) { echo '+'; } else { echo '-'; } ?>

Не запуская код, определите, что выведется на экран:

<?php $test = 1; if ($test != true) { echo '+'; } else { echo '-'; } ?>

Не запуская код, определите, что выведется на экран:

<?php $test = ''; if ($test == false) { echo '+'; } else { echo '-'; } ?>

Не запуская код, определите, что выведется на экран:

<?php test; if (test == true) { echo '+'; } else { echo '-'; } ?>

Сокращенный иф

Пусть, к примеру, мы хотим узнать, равна ли переменная $test значению true. В этом случае конструкцию if можно записать так:

<?php $test = true; if ($test == true) { echo '+'; } else { echo '-'; } ?>

При программировании такие проверки требуются очень часто, поэтому для них существует более изящная сокращенная форма: вместо if ($test == true) можно написать просто if ($test).

Давайте перепишем наш код в сокращенной форме:

<?php $test = true; if ($test) { // эквивалентно if ($test == true) echo '+'; } else { echo '-'; } ?>

Пусть теперь мы проверяем на то, что переменная $test не равна true:

<?php $test = true; if ($test != true) { echo '+'; } else { echo '-'; } ?>

В этом случае сокращенный синтаксис будет выглядеть так:

<?php $test = true; if (!$test) { // используем логическое НЕ echo '+'; } else { echo '-'; } ?>

Аналогичное сокращение существует и для проверки на false. Пусть дан вот такой код:

<?php $test = true; if ($test == false) { echo '+'; } else { echo '-'; } ?>

Условие $test == false на самом деле все равно, что $test != true:

<?php $test = true; if ($test != true) { // эквивалентно if ($test == false) echo '+'; } else { echo '-'; } ?>

Ну, а такое условие мы уже научились сокращать в предыдущем примере. Сократим:

<?php $test = true; if (!$test) { echo '+'; } else { echo '-'; } ?>

Перепишите следующий код с использованием сокращенного сравнения:

<?php $test = true; if ($test == true) { echo '+'; } else { echo '-'; } ?>

Перепишите следующий код с использованием сокращенного сравнения:

<?php $test = true; if ($test == false) { echo '+'; } else { echo '-'; } ?>

Перепишите следующий код с использованием сокращенного сравнения:

<?php $test = true; if ($test != true) { echo '+'; } else { echo '-'; } ?>

Перепишите следующий код с использованием сокращенного сравнения:

<?php $test = true; if ($test != false) { echo '+'; } else { echo '-'; } ?>

Нюанс

Учтите, что в сокращенных операциях сравнение идет по ==, а не по ===.

Не запуская код, определите, что выведется на экран:

<?php $test = 3; if ($test) { echo '+'; } else { echo '-'; } ?>

Не запуская код, определите, что выведется на экран:

<?php $test = 'abc'; if ($test) { echo '+'; } else { echo '-'; } ?>

Не запуская код, определите, что выведется на экран:

<?php $test = ''; if ($test) { echo '+'; } else { echo '-'; } ?>

Не запуская код, определите, что выведется на экран:

<?php $test = 3 * 'abc'; if ($test) { echo '+'; } else { echo '-'; } ?>

Не запуская код, определите, что выведется на экран:

<?php $test = null; if ($test) { echo '+'; } else { echo '-'; } ?>

Не запуская код, определите, что выведется на экран:

<?php $test = false; if ($test) { echo '+'; } else { echo '-'; } ?>

Не запуская код, определите, что выведется на экран:

<?php $test; if ($test) { echo '+'; } else { echo '-'; } ?>

Не запуская код, определите, что выведется на экран:

<?php $test = 0; if ($test) { echo '+'; } else { echo '-'; } ?>

Не запуская код, определите, что выведется на экран:

<?php $test = '0'; if ($test) { echo '+'; } else { echo '-'; } ?>

Не запуская код, определите, что выведется на экран:

<?php $test = -1; if ($test) { echo '+'; } else { echo '-'; } ?>