Начнем с того что ваш код выводит все-таки + а не -.
Если $b = 0 (int, целый тип), то при нестрогом сравнении со строкой «on» она приводится к целому типу, а
значит станет равна нулю (см. 3 абзац), из чего и сработает условие с выводом плюса.
Если $b = «0» (string, строка), то при нестрогом сравнении со строкой «on» типы приводиться не будут, т.к. они уже совпадают, а т.к. строки не равны друг другу то сработает условие с выводом минуса.
Нужно учитывать тот факт, что в $_GET и $_POST все значения являются строками (ну или массивами строк), а значит будут работать правила преобразования типов из строк.