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