Hôm qua tôi đã vấp phải điều này khi tôi sửa đổi mã PHP được viết bởi người khác. Tôi đã bị bối rối rằng một so sánh đơn giản ( if ($var ==! " ")
) không hoạt động như mong đợi. Sau một số thử nghiệm tôi nhận ra rằng bất cứ ai đã viết mã đó được sử dụng ==!
thay vì !==
làm toán tử so sánh. Tôi chưa bao giờ thấy ==!
trong bất kỳ ngôn ngữ nào vì vậy tôi tự hỏi làm thế nào mã này thậm chí có thể hoạt động và đã thực hiện một số thử nghiệm:
<?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");
?>
Điều này tạo ra đầu ra này:
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)
Toán tử dường như làm việc cho các biến boolean và số nguyên, nhưng không phải cho các chuỗi. Tôi không thể tìm thấy ==!
trong tài liệu PHP hoặc bất cứ điều gì về nó trên bất kỳ công cụ tìm kiếm nào (đã thử Google, Bing, DuckDuckGo, nhưng tôi nghi ngờ họ cố gắng diễn giải nó thay vì tìm kiếm chuỗi ký tự). Có ai nhìn thấy điều này trước đây và có thể làm sáng tỏ hành vi này?