Как `intval ()` и `(int)` обрабатывают пробелы?

Руководство по PHP на Преобразование строки в числа говорит:

Значение задается начальной частью строки. Если строка начинается с допустимых числовых данных, это будет используемое значение. В противном случае значение будет 0 (ноль).

Это означает, что все, кроме числа, плюс или минус в начале строки, должно возвращаться 0 когда строка преобразуется в число. Тем не менее, (некоторые) пробелы в начале строки игнорируются:

echo intval("     3");  // 3
echo intval("3");  // 3

Есть ли какие-либо пробелы, которые intval() а также (int) делать не раздеться?

Где это поведение задокументировано?

3

Решение

Наблюдаемое поведение в значительной степени недокументировано. Вероятно, зачистка пространства зависит от 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 довольно странны, как и почти все на этом языке. Кто знает, как это действительно работает под капотом. Лучше не знать.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]