Я просто уменьшил сумасшедшую ошибку до того, что в названии этого вопроса. Я уверен, что есть замечательное объяснение, почему Php считает, что 0 == '%' (или любой другой специальный символ, я думаю). Я подумал, что было бы хорошо получить это объяснение в StackOverflow!
Он будет делать то же самое с любой строкой, преобразовывая нецифровую строку в integer, всегда дает 0.
Использование '===' (для точного, буквального сравнения – значения должны быть одного и того же типа, а также равно) вместо '==' решает эту проблему. С '==' он пытается наложить '%' на число, а 0 – лучшее, что он может сделать.
В случае, если строгий оператор сравнения не подходит, если вы хотите, чтобы оба значения сравнивались как строки, вы можете использовать strcmp (). Примером может быть то, где оба значения являются переменными, а типы могут быть либо строковыми, либо int. Вместо ввода типа в строку, а затем с помощью строгой проверки равенства, strcmp () может быть менее подробным.
Принуждение типа php очень удобно. Но если вы не понимаете его много правил (некоторые могут кусать), вы должны попытаться избежать его использования. См. http://www.php.net/manual/en/types.comparisons.php
поскольку «%» неверно, оно должно быть ложным (0), поэтому, конечно, 0 == '%'
😉 смешно, хотя