Разница между "!= = "и"==!" [закрытый]


вчера я наткнулся на это, когда я изменил PHP-код, написанный кем-то другим. Я был озадачен, что простое сравнение (if ($var ==! " ")) не работает, как ожидалось. После некоторого тестирования я понял, что тот, кто написал этот код, использовал ==! вместо !== как оператор сравнения. Я никогда не видел ==! на любом языке, поэтому я задавался вопросом, как, черт возьми, этот код может даже работать и сделал некоторые тесты:

<?php
echo "intn";
echo "1 !== 0: "; var_dump(1 !== 0);
echo "1 !== 1: "; var_dump(1 !== 1);
echo "1 ==! 0: "; var_dump(1 ==! 0);
echo "1 ==! 1: "; var_dump(1 ==! 1);
echo "booln";
echo "true !== false: "; var_dump(true !== false);
echo "true !== true: "; var_dump(true !== true);
echo "true ==! false: "; var_dump(true ==! false);
echo "true ==! true: "; var_dump(true ==! true);
echo "stringn";
echo '"a" !== " ": '; var_dump("a" !== " ");
echo '"a" !== "a": '; var_dump("a" !== "a");
echo '"a" ==! " ": '; var_dump("a" ==! " ");
echo '"a" ==! "a": '; var_dump("a" ==! "a");
?>

это производит этот выход:

int
1 !== 0: bool(true)
1 !== 1: bool(false)
1 ==! 0: bool(true)
1 ==! 1: bool(false)
bool
true !== false: bool(true)
true !== true: bool(false)
true ==! false: bool(true)
true ==! true: bool(false)
string
"a" !== " ": bool(true)
"a" !== "a": bool(false)
"a" ==! " ": bool(false)
"a" ==! "a": bool(false)

оператор кажется, работает для булевых и целочисленных переменных, но не для строк. Я не могу найти ==! в документации PHP или что-нибудь об этом в любой поисковой системе (пробовал Google, Bing, DuckDuckGo, но я подозреваю, что они пытаются интерпретировать его вместо поиска литеральной строки). Кто-нибудь видел это раньше и может пролить свет на такое поведение?

5 160

5 ответов:

разница в том, что нет оператора ==!.

Это выражение:

$a ==! $b

в основном то же самое, что и это:

$a == (!$b)

нет ==! оператор в PHP

это просто сочетание == и !. Здесь присутствует только соответствующий оператор ==. Так что комбинация ==! будет работать так же, как нормальный ==, проверка Equality и

$variable_a ==! $variable_b 

это не что иное, как

$variable_a == (!$variable_b)

и так:

"a" ==! " ": bool(false)
"a" ==! "a": bool(false) //is same as "a" == (!"a")

и

true ==! false: bool(true)
true ==! true: bool(false)

объединение нескольких символов операторов может не всегда работать как оператор. для например, если мы возьмем = и !, он будет работать как операторы, только если он находится в шаблоне != или !==. Там может быть множество комбинаций для этих символов, как !====,!==! etc.. так далее.. Комбинации операторов должны быть в уникальный формат,уникальный,уникальные комбинации (все символы не будут сочетаться со всеми другими символами) и, безусловно,без какого-либо пространства между их.

проверьте список операторов ниже;

enter image description here

==! - Это не оператор, а два :

== и !

! имеют более высокий приоритет, чем ==

так :

"a" !== " ": bool(true) --> верно, потому что "а" не равно " "

"a" ==! " ": bool(false) --> false, потому что "а" не равен !""

может быть написано с пробелом между == и !.

==! не существует как таковой. Это несколько загадочная нотация == !

поскольку пробелы не имеют значения в этих операциях, вы можете так же легко написать a --> b, что означает a-- > b, но будет выглядеть странно.

Итак, что касается вопроса:"a" ==! " " будет разбираться на "a" == !" ". Отрицание строки покрывается литье, что означает любую строку, но "0" и " ", когда отливали, true.

таким образом, выражение "a" == !" " перечисляется:

  1. "a" == !" "
  2. "a" == !false
  3. "a" == true

, а как string "a" - это не то же самое как bool true, это оценивает выражение false.

Итак, какова мораль этой истории? Не позволяйте себе путать пропущенные или неправильно размещенные пробелы! :)

==! не является оператором

==! не является оператором сравнения php вообще - это то же самое, что и == ! (обратите внимание на пробел)

то есть

if ("a" !== " ") {
    // evaluates to true - "a" and " " are not equal
}

if ("a" == !" ") {
    // unreachable
} else {
    // evaluates to false - "a" is not equal to true (!" " evaluates to true)
}