Логическое логическое отрицание оператора приоритета и ассоциации

Вот мой первый вопрос (и) о Stackru, и я думаю, что он уже задавался здесь раньше, но все, что я ввожу в строку поиска, вызывает у меня разные вопросы. (Или иногда "нет" результатов вообще!)

Я учусь в w3Schools, но я увидел этот, казалось бы, простой фрагмент кода, который всколыхнул небольшой пакет вопросов:

По сути код говорит:

if(! test === FALSE)
  display("test successful!");
else
  display("test failed...")

"test" в данном конкретном случае возвращает строку в случае успеха или (Boolean) FALSE в случае ошибки.

Вот вопросы, которые волновали меня.

  1. Что касается восклицательного знака (он же "Логическое НЕ" или "Оператор отрицания") в начале условного оператора if, то это:

    А) Применимо ко всему утверждению в скобках? Или

    Б) Связано только с "тестом"?

Примечание: ассоциативность оператора отрицания может не изменить результат в этом случае, но его ассоциативность будет иметь значение в случае, подобном: (! FALSE || TRUE), да?

  1. Я понимаю, как оператор отрицания работает с логическими значениями, но как ведет себя оператор отрицания, когда сталкивается со строкой (PHP)?

    A) Изменится ли поведение оператора отрицания, если строка окажется чем-то хитрым, например, "true" или "0"?

  2. Является ли (! Test === FALSE) тем же, что и (test! == FALSE)? Почему они просто не использовали "!=="?

ЗДЕСЬ актуальный код:

if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
  echo("$email is a valid email address");
} else {
  echo("$email is not a valid email address");
}

Еще один вопрос PHP: есть ли какое-то преимущество использования filter_var() по сравнению с filter_input() в этом случае? Почему w3Schools использует filter_var(), а не filter_input()?

1 ответ

Решение
  1. Как вы можете видеть в документах операторы в PHP имеют разные приоритеты. Это значит:! применительно к $test первый.

  2. Согласно документу, пустая строка '' или же '0' будет преобразован в false, иначе true,

  3. Это не то же самое. когда $test равно пустой строке '' или же '0' эти два условия имеют разное поведение.

Другие вопросы по тегам