Başka birinin yazdığı PHP kodunu değiştirdiğimde dün bunu tökezledim. Ben basit bir karşılaştırma ( if ($var ==! " ")
) beklendiği gibi çalışmadığı şaşırdı. Bazı test ettikten sonra ben bu kodu kim yazdıysa, kullanılan fark ==!
yerine !==
karşılaştırılması operatörü olarak. Ben ==!
herhangi bir dilde hiç görmedim , bu yüzden bu kodun nasıl çalıştığını merak ettim ve bazı testler yaptı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");
?>
Bu şu çıktıyı üretir:
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)
İşleç boole ve tamsayı değişkenleri için çalışıyor, ancak dizeler için çalışmıyor gibi görünüyor. ==!
PHP belgelerinde veya herhangi bir arama motorunda bu konuda bir şey bulamıyorum (denenmiş Google, Bing, DuckDuckGo, ancak tam dizeyi aramak yerine yorumlamaya çalıştıklarından şüpheleniyorum). Bunu daha önce gören ve bu davranışa ışık tutabilecek olan var mı?