Sunday 19.8.2012 17:08:12, Jakuje
PHP je v zásadě příjemný jazyk na programování, ale i po mnoha letech, co v něm intenzivně pracuji, mě dokáže překvapit. Dne se mu to podařilo při porovnávání hodnot int a string.
Teď když na to koukám, jaký je to nesmysl a jak by něco takového ve slušně typovaném jazyce vůbec nemohlo vzniknout, tak se téměř stydím. Ale PHP je netypované.
Před pár dny jsem otevřel projekt, abych něco otestoval a našel select, který měl vybrané dvě volby, přestože do něj vstupovala jako vybraná pouze hodnota jedna. Celý systém formulářů, jejich vstupů a výstupů jsem prošel a stále nikde nic. Po minimalizaci poslední části kódu na
php > $a = 'A';
php > var_dump($z,$a,$a==$z,$a === $z);
int(0)
string(1) "A"
bool(true)
bool(false)
mi bylo jasné odkud vítr vane. Porovnání řetězce s číslem není úplně košér. PHP se pokusí provést typové konverzi z řetězce na int, jejíž výsledkem je nula, která je nule rovna.
int(0)
To je celé kouzlo. Někteří se tuto věc pokoušeli nahlásit jako BUG, ale není to chyba - e to vlastnost.