Кто может доступно объяснить почему код исполняется именно так?
строго-типизированое сравнение в помощь
if ($test === 'wrong_promo') { ...
Всё дело в преобразовании типов. 'wrong_promo' преобразуется во float, но так как числа начало этой строки не содержит, то она преобразуется в 0, то есть становится равной $test