Почему строка больше числа? Например "a" > 18 выдает true

Я перепробовал все нейронки и все они теряются на этом вопросе, который задал мне препод пробовал и через переменную и превращал $str в int, чтобы было значение 0, он выводил даже этот 0, но значение все равно выходит true

единственное что нашел в инете, но все равно ничего не понял


Ответы (1 шт):

Автор решения: Ипатьев

Ответ на ваш вопрос находится на той же странице, только чуть выше (и формулируется методом "от противного"):

Сравнение выполняется численно, если оба операнда — числовые строки, или один операнд — число, а другой — числовая строка.

В вашем случае это условие не выполняется, поскольку один из операндов не является ни числом, ни числовой строкой. Следовательно, операнды сравниваются не как числа. А если не как числа, то остаётся вариант сравнивать их, как строки. То есть выражение вычисляется, как

"a" > "18"

что в итоге будет приведено к

(ord("a") > ord("1"))

и закономерно вернёт true.

Ту же самую мысль (и тоже от противного) доносит и текст на вашем скриншоте:

До PHP 8.0.0, если строка (string) сравнивалась с числом или числовой строкой, то перед выполнением сравнения строка (string) преобразовывалась в число.

Это означает, что в современных версиях языка такое преобразование не происходит. То есть опять же, число с нечисловой строкой сравниваются как строки.

Надо сказать, что для меня и самого такое поведение оказалось новостью. Что, в общем, вполне объяснимо - мне редко приходится сравнивать числа со строками. И есть у меня подозрение, что преподавателю тоже интересно узнать ответ на этот вопрос ?

→ Ссылка