А вот этот пример я давно находил. Опытного PHP’фила он не удивит. Нормального же человека очень увидит.
Так вот, этот пример выведет “bug?”. Потому как PHP таки типизированый язык, который пытается прикидываться не типизированым. И $b преобразуется в integer перед сравнением.
В Perl из этого выкрутились тем, что есть два различных оператора сравнений — для строк, и для целых. Но PHP пошел дальше — там два оператора сравнения, один учитывает тип (“===”), другой нет.
Соответственно использование оператора == вместо === становится одной из наиболее частых ошибок в PHP-коде, которые замечают когда слишком поздно.
$a = 0;
$b = '';
if ( $a == $b )
echo «bug?\n»;
if ( $a === $b )
echo «No, it's a feature!\n»;
if ( 0 === '0' )
echo «Are you thing that 0 and '0' equal? ;)\n»;