<?php if ((string)'1.0' == (string)'1') echo ('True'); ?>
выведется True, несмотря на явное указание типа данных? Если == заменить на === то всё работает как задумано (True не выводится), но хотелось бы узнать причину такого поведения.
В случае, если вы сравниваете число со строкой или две строки, содержащие числа, каждая строка будет преобразована в число, и сравниваться они будут как числа. Эти правила также распространяются на оператор switch. Преобразование типов не происходит при использовании === или !== так как в этом случае кроме самих значений сравниваются еще и типы.