булевы условия в условии if

Я хочу дважды проверить что-то о множественных условиях в логическом выражении if в PHP. Учитывая, что я пишу:

if(!empty($_POST) && !isset($_POST['report_btn'])) {...}

это может быть переписано как

if(! ( empty($_POST) && isset($_POST['report_btn']) ) ) {...}

Я хочу удалить один из восклицательных знаков, чтобы посмотреть, смогу ли я сделать код немного аккуратнее. Логика состоит в том, чтобы увидеть, могу ли я выполнить код, если данные POST были отправлены на страницу, но 'report_btn' значение не установлено.

1

Решение

Нет, Вы не можете написать вышеуказанное условие как условие ниже:

Причина:

за:

if(! ( empty($_POST) && isset($_POST['report_btn']) ) ) {...}

матрица результатов будет:

first_statement second_statement result
true            true          false
true            false         true
false           true          true
false           false         true

И для ниже

if(!empty($_POST) && !isset($_POST['report_btn'])) {...}

Матрица результата будет:

first_statement second_statement result
true            true          false
true            false         false
false           true          false
false           false         true

Это означает, что оба кода не похожи.

2

Другие решения

Булева логика говорит, что

!A && !B == !(A || B)
!A || !B == !(A && B)
2

Лучше знать, как правильно преобразовать ваше логическое выражение.

Это хорошо читать о Законы де Моргана который включает в себя ваше дело.

«не (А и В)» означает «(не А) или (не В)»

«не (А или В)» означает «(не А) и (не В)».

2