Логика и/или в while php?
в условие $a || $b != 0 сначала проверяется условие по $a и если оно возвращает true выполняется тело цикла, условие $b != 0 при этом даже не проверяется. Если же условие $a возвращает false - только тогда происходит проверка условия $b != 0.  Это стандартная логика условия ИЛИ в php
Ошибка здесь:
Повторять действия пока $a или $b не станет = 0.
Выполнять пока $a или ($b !=0) true
На пятой итерации цикла
a = 50
b = 0
значит идём дальше
На десятой итерации цикла
a = 0
b = -50 (true)
значит идём дальше
Может поставить условия $a != 0 || $b != 0