условные операторы — PHP, IF Условие с оператором NOT (!) и другим набором скобок

В чем разница между этими двумя утверждениями?

if (!$var === true) {

или же

if (!($var === true)) {

Я наткнулся на некоторый подобный код и пытался выяснить, как он используется.

Я понимаю, что условия внутри скобок оцениваются изнутри наружу.

1

Решение

Это связано с PHP Приоритет оператора.

! оценивается до === является. Итак, в первом примере:

  1. сводить на нет $var
  2. Сравните это значение с true

Во втором примере вы используете скобки для принудительного === случиться первым. Итак, вы получаете:

  1. сравнить $var к истине
  2. Отрицать сравнение

Так как вы используете === — который сравнивает тип и значение — для сравнения с логическим, это не совсем эквивалент.

Что, если $var = 5?

  1. !$var === true становится !5 === true, Это 0 === true, который false,
  2. !($var === true) становится !(5 === true), Это !(false), который true,

Примечание: при выполнении !5 в первом примере 5 является преобразован в логическое значение, затем отрицается (вот как ! работает). Нет логического преобразования 5 во втором примере, так как вы используете ===,

Примечание 2: 2-й пример эквивалентен $var !== true,

9

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

Если $var является логическим или логически эквивалентным значением, тогда первый фрагмент кода инвертирует его и затем сравнивает. Например, если $var = falseпервый фрагмент оценивается как if (true === true) { ... }, Изменяется само сравниваемое значение (не значение переменной, а значение, используемое для сравнения).

Это противоположно второму фрагменту кода, который инвертирует результат сравнения. В предыдущем примере true === true результаты, очевидно, в true, Во втором фрагменте, если $var = false (как это было в предыдущем примере), затем false === true ложно Однако затем мы отрицаем результат этого сравнения и получаем false,

Ответы здесь одинаковы, но по сути они рассчитываются по-разному. Мне трудно думать о примере, в котором два результата приводят к разным ответам. Но то, что они делают, это две разные операции.

Как уже было сказано, первый пример: !$val изменяет значение, которое используется для сравнения с trueтогда как второй пример, !($val === true) изменяет результат сравнения двух разных значений.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector