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

в условии сравнили, если b = on (а оно не равно), то будет плюс на экране.
Но оно не равно, там ведь ноль, поэтому минус.

В пхп не нужно преобразовывать типы.
если там число, то это число, можешь складывать, вычитать, делить.
если строка — это строка.
он сам поймет, что внутри, за исключением редких моментов.