Почему строка больше числа? Например "a" > 18 выдает true
Я перепробовал все нейронки и все они теряются на этом вопросе, который задал мне препод
пробовал и через переменную и превращал $str в int, чтобы было значение 0, он выводил даже этот 0, но значение все равно выходит true
единственное что нашел в инете, но все равно ничего не понял
Ответы (1 шт):
Ответ на ваш вопрос находится на той же странице, только чуть выше (и формулируется методом "от противного"):
Сравнение выполняется численно, если оба операнда — числовые строки, или один операнд — число, а другой — числовая строка.
В вашем случае это условие не выполняется, поскольку один из операндов не является ни числом, ни числовой строкой. Следовательно, операнды сравниваются не как числа. А если не как числа, то остаётся вариант сравнивать их, как строки. То есть выражение вычисляется, как
"a" > "18"
что в итоге будет приведено к
(ord("a") > ord("1"))
и закономерно вернёт true.
Ту же самую мысль (и тоже от противного) доносит и текст на вашем скриншоте:
До PHP 8.0.0, если строка (string) сравнивалась с числом или числовой строкой, то перед выполнением сравнения строка (string) преобразовывалась в число.
Это означает, что в современных версиях языка такое преобразование не происходит. То есть опять же, число с нечисловой строкой сравниваются как строки.
Надо сказать, что для меня и самого такое поведение оказалось новостью. Что, в общем, вполне объяснимо - мне редко приходится сравнивать числа со строками. И есть у меня подозрение, что преподавателю тоже интересно узнать ответ на этот вопрос ?