Руководство по PHP на Преобразование строки в числа говорит:
Значение задается начальной частью строки. Если строка начинается с допустимых числовых данных, это будет используемое значение. В противном случае значение будет 0 (ноль).
Это означает, что все, кроме числа, плюс или минус в начале строки, должно возвращаться 0
когда строка преобразуется в число. Тем не менее, (некоторые) пробелы в начале строки игнорируются:
echo intval(" 3"); // 3
echo intval("3"); // 3
Есть ли какие-либо пробелы, которые intval()
а также (int)
делать не раздеться?
Где это поведение задокументировано?
Наблюдаемое поведение в значительной степени недокументировано. Вероятно, зачистка пространства зависит от strtod()
в C, который должен использовать isspace()
.
intval()
руководство говорит:
Общие правила целочисленное приведение применять.
По ссылке (ссылки удалены):
Чтобы явно преобразовать значение в целое число, используйте либо
(int)
или же(integer)
слепки. Однако в большинстве случаев приведение не требуется, поскольку значение будет автоматически преобразовано, если для оператора, функции или структуры управления требуется целочисленный аргумент. Значение также может быть преобразовано в целое число с помощьюintval()
функция.
Так выглядит кастинг и intval()
эквивалентны. И чуть ниже цитата выше:
Из строк
Увидеть Преобразование строки в числа
ХОРОШО. Ничего особо полезного для нас нет, кроме этой маленькой записки:
Для получения дополнительной информации об этом преобразовании см. Справочную страницу Unix для strtod (3).
Следуя ветке ссылок еще раз, выбрав версию strtod()
указано в POSIX, стандарт API для UNIX.
Эти функции должны преобразовать начальную часть строки, на которую указывает
nptr
вdouble
,float
, а такжеlong double
представление соответственно. Сначала они разбивают входную строку на три части:
1. Начальная, возможно, пустая последовательность символов пробела (как указано вisspace()
)
…
Здравый смысл говорит нам, что это должно относиться к поплавкам только потому, что strtod()
возвращает число с плавающей запятой в C, но синтаксический анализ числа и его внутреннее представление в PHP довольно странны, как и почти все на этом языке. Кто знает, как это действительно работает под капотом. Лучше не знать.
Других решений пока нет …