Я продолжаю сталкиваться с действительно странным поведением программирования php. Вот пример:
<?php date_default_timezone_set("Europe/Berlin"); $interval1 = (int) 336000; $interval2 = (int) 1459200; $interval3 = (int) 17403000; $interval4 = (int) 43205760; $interval5 = (int) 84299520; $week = (int) 604800; ?>
Когда я запускаю этот код, я получаю «неожиданный T_INT_CAST на строке 8 ошибка» WTF? !! первые 5 отливок работают отлично. Когда я ничего не делаю, первые 5 выражений приводят к целому числу, последнему в строке. Я заметил это, сравнивая ценности и явно получившие неправильные результаты.
Вот вывод шестнадцатеричного редактора (как указано в комментарии):
00000000: 3C 3F 70 68 70 20 0A 64 61 74 65 5F 64 65 66 61 00000010: 75 6C 74 5F 74 69 6D 65 7A 6F 6E 65 5F 73 65 74 00000020: 28 22 45 75 72 6F 70 65 2F 42 65 72 6C 69 6E 22 00000030: 29 3B 0A 24 69 6E 74 65 72 76 61 6C 31 20 3D 20 00000040: 28 69 6E 74 29 20 33 33 36 30 30 30 3B 20 2F 2F 00000050: 74 65 73 74 20 69 6E 74 65 72 76 61 6C 20 66 72 00000060: 6F 6D 20 68 74 74 70 3A 2F 2F 65 63 6B 71 75 61 00000070: 72 74 65 72 73 2E 63 6F 6D 2F 6D 6F 65 74 65 72 00000080: 77 6F 6C 66 2F 64 69 61 67 72 61 6D 6D 31 2E 68 00000090: 74 6D 6C 0A 24 69 6E 74 65 72 76 61 6C 32 20 3D 000000A0: 20 28 69 6E 74 29 20 31 34 35 39 32 30 30 3B 0A 000000B0: 24 69 6E 74 65 72 76 61 6C 33 20 3D 20 28 69 6E 000000C0: 74 29 20 31 37 34 30 33 30 30 30 3B 0A 24 69 6E 000000D0: 74 65 72 76 61 6C 34 20 3D 20 28 69 6E 74 29 20 000000E0: 34 33 32 30 35 37 36 30 3B 0A 24 69 6E 74 65 72 000000F0: 76 61 6C 35 20 3D 20 28 69 6E 74 29 38 34 32 39 00000100: 39 35 32 30 3B 0A 24 77 65 65 6B 20 3D 20 A0 69 00000110: 6E 74 76 61 6C 28 36 30 34 38 30 30 29 3B
Как вы можете видеть из шестнадцатеричного редактора в вашем php-коде, существует неразрывное пространство непосредственно перед запуском intval / (int): (второе пространство)
00000100: 39 35 32 30 3B 0A 24 77 65 65 6B 20 3D 20
A0
69
избавиться от него, и ваш код должен работать.
Вы должны думать о
PHP_INT_SIZE
Размер целого зависит от платформы, хотя максимальное значение около двух миллиардов – это обычное значение (это 32 бита). Обычно 64-битные платформы имеют максимальное значение около 9E18. PHP не поддерживает целые числа без знака. Целочисленный размер может быть определен с использованием константы PHP_INT_SIZE и максимального значения с использованием константы PHP_INT_MAX с PHP 4.4.0 и PHP 5.0.5.
При попытке конвертировать из чисел с плавающей запятой в целые числа, если float выходит за границы целого числа (обычно +/- 2.15e + 9 = 2 ^ 31 на 32-битных платформах и +/- 9.22e + 18 = 2 ^ 63 на 64-битных платформах), результат не определен, так как float не имеет достаточной точности для получения точного целочисленного результата. Никакого предупреждения, даже уведомление не будет опубликовано, когда это произойдет!
Попытайтесь изменить константу PHP_INT_SIZE и сообщить нам, что изменилось