Вот мои любимые приколы:
$str1 = "240610708";
$str2 = "QNKCDZO";
echo md5($str1) . "\n"; // 0e462097431906509019562988736854
echo md5($str2) . "\n"; // 0e830400451993494058024219903391
if (md5($str1) == md5($str2)) {
echo "MD5 хеши равны!\n";
}
md5 хэши равны, потому что php думает, что 0e... - это экспоненциальная нотация числа.
Дальше необъяснимое, прибавлять единицу можно по-разному, получая совершенно разный результат:
`
$x = "0abc";
$x = $x+1;
echo $x; // получится 1
$x = "0abc";
$x++;
echo $x; // получится строка 0abd
Не только в php проблемы, конечно.
На картинке выше, если кто не понял, Excel приводит 1/2 к 1 февраля.
Ну и классика js
name = 2;
console.log(name+2); // 22
потому что window.name хоть и получило число, но это заголовок окна, т.е. костылём прибито, что это строка.
Или такое
[1, 2, 3] + [4, 5, 6] // -> '1,2,34,5,6'
Because fuck you, that's why.
Короче, не говорите мне, что неявная типизация - это удобно. Это говно
🫥 Cross Join
⠀
P.S. В коментах пишут про ===, strict types. Но ребят, это как раз попытка языков уйти от неявного приведения типов, потому что это говно.
