Автоматическое приведение типов в PHP в очередной раз подтвердило subj. Тут помогал разобраться в одном проекте, у человека ситуация такова - некоторая переменная передается через GET запрос, но она может быть передана, а может быть и пропущена. Чтобы не мучаться, он решил забить такой код:
if(!isset($_GET['my_var'])) $_GET['my_var'] = 0;
Далее у него происходят проверки следующего типа:
if($_GET['my_var'] = "some_value" and ...
Странно, первая часть выражения всегда True, если значение my_var не было передано в GET запросе.
Мне не составило труда разобраться - на лицо ошибка автоматического приведения типов в PHP, потому как, заменив строковую константу "some_value" на число, допустим 1, проблемы не возникает. И, чтобы исправить положение достаточно было изменить самую первую строку:
if(!isset($_GET['my_var'])) $_GET['my_var'] = 1;
И после этого меня с удивлением спрашивают, почему я так люблю жестко заданные типы или строго слежу за типом переменных там, где строгих типов нет (PHP, JavaScript, VBScript и т.п.).
Версия PHP: 4.3.4 for Windows
P.S. Иногда, знаете ли, хочется повозмущаться