if (0 == '%') echo "WTF, Php, почему вы не можете разумно сравнить вещи?" - PullRequest
5 голосов
/ 24 февраля 2010

Я просто уменьшил сумасшедшую ошибку до заголовка этого вопроса. Я уверен, что есть Совершенно Разумное Объяснение, почему Php считает, что 0 == '%' (или любой другой специальный символ, я думаю). Я думал, что было бы хорошо получить это объяснение на StackOverflow!

Ответы [ 5 ]

7 голосов
/ 24 февраля 2010

Это будет делать то же самое для любой строки, преобразование нечисловой строки в целое число всегда дает 0.

6 голосов
/ 24 февраля 2010

Использование '===' (для точного, буквального сравнения - значения должны быть одинакового типа и также равными) вместо '==' решает эту проблему. С '==' он пытается преобразовать '%' в число, а 0 - лучшее, что он может сделать.

1 голос
/ 24 февраля 2010

Если оператор строгого сравнения не подходит напрямую, если вы хотите, чтобы оба значения сравнивались как строки, вы можете использовать strcmp ().Примером может служить случай, когда оба значения являются переменными, а типы могут быть либо строковыми, либо int.Вместо приведения типов к строке и последующей строгой проверки равенства strcmp () может быть менее подробным.

Приведение типов в php очень удобноНо если вы не понимаете многих правил (некоторые могут кусаться), вам следует избегать их использования.Смотри http://www.php.net/manual/en/types.comparisons.php

0 голосов
/ 06 ноября 2018

Это потому, что он преобразует «%» в число, и это 0.

Однако способ, которым PHP преобразует строки в числа, является чистым злом ИМХО, потому что не числовая строка не должна приводить к нулю.

Если он начинается с цифры, то php выдаст первое найденное в нем число и проигнорирует остальную часть строки. Итак:

"2 times 5 equals 10"

.. приведет к 2 при приведении к числу.

Статья в документации

0 голосов
/ 24 февраля 2010

, поскольку «%» не соответствует действительности, оно должно быть ложным (0), поэтому, конечно, 0 == «%»

;-) забавно, хотя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...