Разница между "!= = "и"==!" [закрытый]
вчера я наткнулся на это, когда я изменил 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-->.
проверьте список операторов ниже;

==! - Это не оператор, а два :
== и !
! имеют более высокий приоритет, чем ==
так :
"a" !== " ": bool(true) --> true, потому что " a "на самом деле не равно" "
"a" ==! " ": bool(false) --> false, потому что" a " не равно !""
может быть написано с пробелом между == и !.
==! не существует как таковой. Это несколько загадочное обозначение == !
поскольку пробелы не имеют значения в этих операциях, вы можете так же легко написать a --> b, который оценивает в a-- > b, но будет выглядеть странно.
так, на вопрос: "a" ==! " " будет проанализирован, чтобы "a" == !" ". Отрицание строки покрывается литье, что означает любую строку, кроме "0" и " ", когда отливали, true.
таким образом, выражение "a" == !" " перечисляется:
"a" == !" ""a" == !false"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)
}