Вопрос по php, comparison, debugging – if (0 == '%') echo «WTF, Php, почему вы не можете разумно сравнивать вещи?»

5

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

Вот почему я пишу PHP более или менее так же, как я пишу на C ++. ;) Teekin

Ваш Ответ

5   ответов
0

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

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

"2 times 5 equals 10"

.. приведет к 2, когда приведен к числу.

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

6

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

Если вы используете ===, позаботьтесь о том, чтобы $ x = '0'; var_dump ($ x === 0) выдает false ($ x - строка, 0 - целое число) :) Goran Rakic
7

преобразование не числовой строки в целое число всегда дает 0.

Вот почему (наряду со многими другими сумасшедшими вещами) PHP даже не следует считать настоящим «языком программирования». slashCoder
0

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

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

Он не преобразует строку в bool, другой операнд является целым числом, а не bool. Goran Rakic
1

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

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

Похожие вопросы