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