Вы также можете найти несколько упоминаний типа двойной точности (double). Рассматривайте его как число с плавающей точкой, два имени существуют только по историческим причинам.
Как правило, программист не устанавливает тип переменной; обычно это делает PHP во время выполнения программы в зависимости от контекста, в котором используется переменная.
Замечание: Если вы желаете проверить тип и значение определённого выражения, используйте var_dump().
Если же вам для отладки необходимо просто удобочитаемое представление типа, используйте gettype(). Чтобы проверить на определенный тип, не используйте gettype(), применяйте для этого is_type функции. Вот несколько примеров:
// Если это целое, увеличить на четыре if (is_int($an_int)) { $an_int += 4; }
// Если $a_bool - это строка, вывести ее // (ничего не выводит) if (is_string($a_bool)) { echo "Строка: $a_bool"; } ?>
Если вы хотите принудительно изменить тип переменной, вы можете либо привести переменную, либо использовать функцию settype().
Обратите внимание, что переменная, в зависимости от ее типа в данный момент, в определённых ситуациях может иметь разные значения. Более подробную информацию смотрите в разделе Манипуляции с типами. Также вам, возможно, будет интересно посмотреть таблицы сравнения типов, поскольку в них приведены примеры различных сравнений, связанных с типами.
// == это оператор, который проверяет // эквивалентность и возвращает boolean if ($action == "show_version") { echo "The version is 1.23"; }
// это необязательно... if ($show_separators == TRUE) { echo "\n"; }
// ... потому что следующее имеет тот же самый смысл: if ($show_separators) { echo "\n"; } ?>
Преобразование в булев тип
Для явного преобразования в boolean, используйте (bool) или (boolean). Однако, в большинстве случаев приведение типа необязательно, так как значение будет автоматически преобразовано, если оператор, функция или управляющая конструкция требует boolean аргумент.
Целые числа могут быть указаны в десятичной (основание 10),
шестнадцатеричной
(основание 16), восьмеричной (основание 8) или двоичной (основание 2)
системе счисления, с необязательным предшествующим знаком (- или +).
Двоичная запись integer доступна начиная с PHP 5.4.0.
Для записи в восьмеричной системе счисления, необходимо поставить пред числом 0 (ноль).
Для записи в шестнадцатеричной системе счисления, необходимо поставить перед числом 0x.
Для записи в двоичной системе счисления, необходимо поставить перед числом 0b
Пример #1 Целые числа
$a = 1234; // десятичное число $a = -123; // отрицательное число $a = 0123; // восьмеричное число (эквивалентно 83 в десятичной системе) $a = 0x1A; // шестнадцатеричное число (эквивалентно 26 в десятичной системе) ?>
Формально, структуру целых чисел можно записать так:
Размер integer зависит от платформы, хотя, как правило,
максимальное значение примерно равно 2 миллиардам (это 32-битное знаковое).
64-битные платформы обычно имеют максимальное значение около 9E18. PHP
не поддерживает беззнаковые целые. С версии PHP 4.4.0 и PHP 5.0.5 размер
integer может быть определен с помощью константы PHP_INT_SIZE, а
его максимальное значение - с помощью константы PHP_INT_MAX.
Внимание
Если в восьмеричном integer будет обнаружена неверная цифра (например, 8 или 9),
оставшаяся часть числа будет проигнорирована.
Пример #2 Странности с восьмеричными числами
var_dump(01090); // 010 octal = 8 decimal ?>
Переполнение целых чисел
Если PHP обнаружил, что число превышает размер типа integer,
он будет интерпретировать его в качестве float. Аналогично,
если результат операции лежит за границами типа integer, он будет преобразован в float.
Пример #3 Переполнение целых на 32-битных системах
В PHP не существует оператора деления целых чисел.
Результатом 1/2 будет float0.5.
Если привести значение к integer, оно будет округлено вниз.
Для большего контроля над округлением используйте функцию round().
Для явного преобразования в integer, используйте приведение
(int) или (integer). Однако,
в большинстве случаев, в приведении типа нет необходимости, так как значение
будет автоматически преобразовано, если оператор, функция или управляющая структура
требует аргумент типа integer. Значение также может быть преобразовано в
integer с помощью функции intval().
При преобразовании из float в integer, число будет округлено
в сторону нуля.
Если число с плавающей точкой превышает размеры integer (обычно
+/- 2.15e+9 = 2^31 на 32-битных системах и
+/- 9.22e+18 = 2^63 на 64-битных системах), результат будет неопределенным,
так как float не имеет достаточной точности, чтобы вернуть верный результат.
В этом случае не будет выведено ни предупреждения, ни даже замечания!
Внимание
Никогда не приводите неизвестную дробь к integer, так как это
иногда может дать неожиданные результаты.
Для других типов поведение преобразования в integer не определено.
Не полагайтесь на любое наблюдаемое поведение,
так как оно может измениться без предупреждения.
Числа с плавающей точкой
Числа с плавающей точкой (также известные как "float", "double", или "real")
могут быть определены следующими синтаксисами:
Размер числа с плавающей точкой зависит от платформы, хотя максимум, как правило
составляет ~1.8e308 с точностью около 14 десятичных цифр (64-битный IEEE формат).
Внимание
Точность чисел с плавающей точкой
Числа с плавающей точкой имеют ограниченную точность. Хотя это
зависит от операционной системы, в PHP обычно используется формат
двойной точности IEEE 754, дающий максимальную относительную ошибку
округления порядка 1.11e-16.
Неэлементарные арифметические операции могут давать большие ошибки,
и, разумеется, необходимо принимать во внимание распространение ошибок
при совместном использовании нескольких операций.
Кроме того, рациональные числа, которые могут быть точно представлены
в виде чисел с плавающей точкой с основанием 10, например,
0.1 или 0.7, не имеют
точного внутреннего представления в качестве чисел с плавающей точкой
с основанием 2, вне зависимости от размера мантиссы.
Поэтому они и не могут быть преобразованы в их внутреннюю двоичную форму
без небольшой потери точности. Это может привести к неожиданным результатам:
например, floor((0.1+0.7)*10) скорее всего вернет
7 вместо ожидаемого 8, так как
результат внутреннего представления будет чем-то вроде
7.9999999999999991118....
Так что никогда не доверяйте точности чисел с плавающей точкой до последней цифры,
и никогда не проверяйте их на равенство.
Если вам действительно необходима высокая точность, используйте
математические функции произвольной точности и
gmp-функции.
Преобразование в число с плавающей точкой
Информацию о преобразовании строк в числа с плавающей точкой смотрите в разделе
Преобразование строк в числа.
Для значений других типов преобразование будет сначала осуществлено в
в integer и затем в число с плавающей точкой.
Дополнительную информацию смотрите в разделе
Преобразование к целому.
Начиная с версии PHP 5, при преобразовании объекта к числу с плавающей точкой
выводится замечание об ошибке.
NaN
Некоторые числовые операции могут возвращать значение, представляемое
константой NAN. Данный результат означает неопределенное
или непредставимое значение в операциях с плавающей точкой. Любая строгое
или нестрогое сравнение данного значения с другим значением, включая его
самого, возвратит FALSE.
Так как NAN представляет собой неограниченное количество
различных значений, то NAN не следует сравнивать с
другими значениями, включая ее саму. Вместо этого, для определения ее наличия
необходимо использовать функцию is_nan().