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

вчера я наткнулся на это, когда я изменил 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 ответов


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

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

$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.. так далее.. Комбинации операторов должны быть в уникальный формат, уникальный, уникальные комбинации (все символы не будут сочетаться со всеми другими символами) и, безусловно,без какого-либо пространства между их!--29-->.

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

enter image description here


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

== и !

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

так :

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

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

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


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

поскольку пробелы не имеют значения в этих операциях, вы можете так же легко написать 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)
}