Вчера я наткнулся на это, когда модифицировал PHP-код, написанный кем-то другим. Я был озадачен тем, что простое сравнение (if ($var ==! " ")
) не работает должным образом. После некоторого тестирования я понял, что тот, кто написал этот код, использовал ==!
вместо !==
в качестве оператора сравнения. Я никогда не видел ==!
на любом языке, поэтому я задавался вопросом, как, черт возьми, этот код мог бы работать и выполнял некоторые тесты:
<?php
echo "int\n";
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 "bool\n";
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 "string\n";
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, но я подозреваю, что они пытаются интерпретировать ее, а не искать буквальную строку). Кто-нибудь видел это раньше и может пролить свет на это поведение?