Числа в PHP
Числа в PHP бывают трёх основных видов:
IntegerFloatNumeric Strings
Вы также встретите два особых числовых значения:
InfinityNaN
PHP создаёт числовую переменную, как только вы присваиваете ей число; отдельное объявление не требуется.
Если вы не уверены, какой тип у переменной или объекта, передайте их в var_dump().
Проверка типов данных
var_dump() сообщает и тип, и значение, поэтому видно, что $c — строка, хотя она содержит цифры:
Вывод: PHP-скрипт
<?php
$a = 5;
$b = 5.34;
$c = "25";
var_dump($a);
var_dump($b);
var_dump($c);
?>
Числовые типы переменных
Каждая из этих переменных получает тип от присвоенного ей значения:
<?php
$a = 5;
$b = 5.34;
$c = "25";
?>
Функция is_int() в PHP
Чтобы проверить, содержит ли переменная целое число, используйте is_int().
Целые числа не имеют дробной части, например 2, 256, -256, 10358 и -179567.
Их диапазон зависит от системы. В 32-битных системах целое число лежит в пределах от -2147483648 до 2147483647, а в 64-битных — от -9223372036854775808 до 9223372036854775807. Если выйти за любую из этих границ, PHP сохранит значение как число с плавающей точкой.
Примечание: Вычисление с участием числа с плавающей точкой тоже даёт число с плавающей точкой. Например, 4 * 2.5 равно 10, но это 10 хранится как число с плавающей точкой, потому что 2.5 — один из операндов.
Запомните эти правила записи целых чисел:
- Нужна хотя бы одна цифра
- Десятичная точка не допускается
- Значение может быть положительным или отрицательным
- Доступны четыре формы записи: десятичная (основание 10), шестнадцатеричная (основание 16, с префиксом 0x), восьмеричная (основание 8, с префиксом 0) и двоичная (основание 2, с префиксом 0b)
В PHP также есть три встроенные константы для целых чисел:
PHP_INT_MAX— наибольшее доступное целое числоPHP_INT_MIN— наименьшее доступное целое числоPHP_INT_SIZE— сколько байтов занимает целое число
Проверка, является ли переменная целым числом
$x содержит целое число, а $y нет, поэтому только первая проверка даёт true:
Вывод: PHP-скрипт
<?php
$x = 5985;
var_dump(is_int($x));
$y = 59.85;
var_dump(is_int($y));
?>
Функция is_float() в PHP
is_float() сообщает, содержит ли переменная число с плавающей точкой.
Числа с плавающей точкой записываются с десятичной точкой или в экспоненциальной форме, например 2.0, 256.4, 10.358, 7.64E+5 и 5.56E-5.
Насколько большим может быть такое число, зависит от платформы, но обычный предел составляет около 1.7976931348623E+308 с точностью до 14 цифр.
Начиная с PHP 7.2, числа с плавающей точкой описывают эти встроенные константы:
PHP_FLOAT_MAX— наибольшее число с плавающей точкой, которое может представить PHPPHP_FLOAT_MIN— наименьшее положительное число с плавающей точкой, которое может представить PHPPHP_FLOAT_DIG— сколько десятичных цифр сохраняется без потерь при округлении до числа с плавающей точкой и обратноPHP_FLOAT_EPSILON— наименьшее положительное x, для которого x + 1.0 != 1.0
Проверка, является ли переменная числом с плавающей точкой
У значения 10.365 есть десятичная точка, поэтому проверка даёт true:
Вывод: PHP-скрипт
<?php
$x = 10.365;
var_dump(is_float($x));
?>
Бесконечность в PHP
У числа с плавающей точкой в PHP есть допустимый диапазон на каждой платформе. Значение внутри этого диапазона считается конечным, и проверить это можно с помощью is_finite().
Значение за пределами этого диапазона считается бесконечным, и именно это проверяет is_infinite().
Проверка, является ли значение бесконечным
1.9e411 слишком велико для числа с плавающей точкой, поэтому PHP считает его бесконечным:
Вывод: PHP-скрипт
<?php
$x = 1.9e411;
var_dump(is_infinite($x));
?>
NAN и функция is_nan() в PHP
Имя NAN — сокращение от «Not A Number». Это то, что вы получаете в результате математической операции, не имеющей смысла.
Чтобы обнаружить такой результат, передайте значение в is_nan().
Проверка значения NAN
Арккосинус 8 не определён, поэтому acos(8) даёт NAN, а is_nan() это подтверждает:
Вывод: PHP-скрипт
<?php
$x = acos(8);
var_dump($x);
// Проверяем, является ли значение «не числом» (NaN)
var_dump(is_nan($x));
?>
Числа и числовые строки в PHP
Числа не всегда хранятся как числа: текст вроде «5985» — это числовая строка. is_numeric() даёт true в обоих этих случаях и false во всех остальных.
Проверка, является ли переменная числовой
Здесь проверку не проходит только «Hello»; число, числовая строка и результат сложения проходят её:
Вывод: PHP-скрипт
<?php
$x = 5985;
var_dump(is_numeric($x));
$x = "5985";
var_dump(is_numeric($x));
$x = "59.85" + 100;
var_dump(is_numeric($x));
$x = "Hello";
var_dump(is_numeric($x));
?>
PHP intval(): получение целочисленного значения переменной
Когда вам нужно получить целое число из переменной, передайте её в intval().
Получение целочисленного значения
И число с плавающей точкой, и строка дают 23465, потому что дробная часть отбрасывается:
Вывод: PHP-скрипт
<?php
$x = 23465.768;
echo intval($x);
echo "\n";
$x = "23465.768";
echo intval($x);
?>