Странное поведение с числами, которые имеют ведущий ноль

У меня есть PHP-код с некоторыми целыми числами, и все работает нормально, кроме случаев, когда у меня есть 08 или же 0X как целое число Все отлично работает, когда я помещаю их в цитату.

Пример номера:

2      //Works fine
08     //Doesn't work
012    //Doesn't work
"08"   //Works fine again
"012"  //Works fine again

Кто-нибудь может сказать мне причину этого?

1 ответ

Решение

Если вы просто пишете 08 и 09 (без кавычек) или любую другую цифру с начальным 0, PHP считает, что вы пишете восьмеричное значение, а 08 и 09 являются недопустимыми восьмеричными числами.

http://www.php.net/manual/en/language.types.integer.php

Синтаксис

Целые числа могут быть указаны в десятичной (основание 10), шестнадцатеричной (основание 16), восьмеричной (основание 8) или двоичной (основание 2) записи, которой может предшествовать знак (- или +).

Двоичные целочисленные литералы доступны с PHP 5.4.0.

Чтобы использовать восьмеричное обозначение, перед числом ставьте 0 (ноль). Чтобы использовать шестнадцатеричное обозначение, перед числом должно быть 0x. Чтобы использовать двоичную запись, перед числом введите 0b.

[...]

Предупреждение: до PHP 7, если недопустимая цифра была задана в восьмеричном целом (т. Е. 8 или 9), оставшаяся часть была проигнорирована. Начиная с PHP 7, возникает ошибка синтаксического анализа.

Другие вопросы по тегам