Я перечитывал ответы и не видел, чтобы кто-нибудь упомянул самую большую оговорку при преобразовании чисел в PHP.
Самый голосующий ответ предлагает сделать следующее:
$str = "3.14"
$intstr = (int)$str // now it's a number equal to 3
Это великолепно. PHP делает прямое приведение. Но что, если мы сделали следующее?
$str = "3.14is_trash"
$intstr = (int)$str
Считает ли PHP такие преобразования допустимыми?
Видимо Да .
PHP читает строку, пока не найдет первый нечисловой символ для требуемого типа. Это означает, что для целых чисел числовые символы равны [0-9]. В результате он читает 3
, поскольку он находится в диапазоне символов [0-9], он продолжает читать. Читает .
и останавливается там, поскольку он не находится в диапазоне [0-9].
То же самое произошло бы, если бы вы были брошены, чтобы плавать или удваиваться. PHP будет читать 3
, затем .
, затем 1
, затем 4
и останавливаться на i
, поскольку это недопустимый числовой символ с плавающей запятой.
В результате "million" >= 1000000
оценивается как ложное, но "1000000million" >= 1000000
оценивается как true
.
Смотри также:
https://www.php.net/manual/en/language.operators.comparison.php как выполняются преобразования при сравнении
https://www.php.net/manual/en/language.types.string.php#language.types.string.conversion как строки преобразуются в соответствующие числа