Abs: примеры (PHP)
abs(mixed $num): int|floatФункция abs в PHP возвращает абсолютное значение числа (модуль числа). Она используется, когда требуется получить число без знака, игнорируя, является ли исходное значение положительным или отрицательным.
Описание и аргументы
Синтаксис функции прост: abs(mixed $num): mixed.
Функция принимает один обязательный аргумент:
- $num - число, для которого вычисляется модуль. Аргумент может быть целым числом (int), числом с плавающей точкой (float) или числовой строкой. Начиная с PHP 8.0.0, передача нечисловых строк вызывает предупреждение TypeError, а в более ранних версиях возвращала 0.
Тип возвращаемого значения соответствует типу переданного аргумента (целое число для целых и числовых строк, представляющих целые числа; число с плавающей точкой для чисел с плавающей точкой и числовых строк, представляющих числа с плавающей точкой).
Короткие примеры использования
echo abs(-10);10
echo abs(-3.14);3.14
echo abs("-42");42
var_dump(abs(-5), abs(-5.0));int(5) float(5)
Похожие функции в PHP
Прямых аналогов функции abs() для чисел в PHP нет. Однако, для других типов данных или операций существуют следующие функции:
- gmp_abs() - вычисляет абсолютное значение для чисел типа GMP (большие целые числа). Используется, когда работа ведется с числами за пределами стандартных целочисленных типов PHP.
- max() и min() - в комбинации могут эмулировать поведение abs в некоторых контекстах сравнения, но это не является их основным назначением.
- Для комплексных чисел (расширение ext-complex) используется метод abs() объекта комплексного числа, который возвращает его модуль (длину вектора).
Функцию abs() предпочтительно использовать для простого получения модуля скалярного числового значения.
Аналоги в других языках
Функция abs() работает аналогично, но также переопределяется для пользовательских объектов через магический метод __abs__.
print(abs(-15))
print(abs(-2.78))15 2.78
Метод Math.abs(). Всегда возвращает число. NaN для нечисловых значений.
console.log(Math.abs(-7));
console.log(Math.abs('-3.5'));7 3.5
Функция ABS(). Работает в запросах SQL.
SELECT ABS(-100.50) AS result;result: 100.50
Используются функции abs(), labs(), llabs() для разных целочисленных типов и fabs() для чисел с плавающей точкой из библиотеки cmath.
В отличие от PHP, в статически типизированных языках часто требуется использовать разные функции для разных типов данных.
Типичные ошибки
Начиная с PHP 8.0.0, передача нескалярного или неконвертируемого в число аргумента вызывает TypeError.
echo abs("текст");TypeError: abs(): Argument #1 ($num) must be of type int|float, string given
В более ранних версиях такая передача могла приводить к неочевидным результатам.
// PHP 7
var_dump(abs("текст"));int(0)
Важно помнить о типе возвращаемого значения.
$result = abs(-5.5);
// Если логика программы ожидает int, может возникнуть ошибка.
echo $result + 1; // Сложение float и int6.5
Изменения в последних версиях PHP
- PHP 8.0.0: Функция abs() теперь выбрасывает исключение TypeError, если аргумент не является числом (int, float) или числовой строкой. Ранее нечисловые строки преобразовывались в 0, а для массивов или объектов возвращался 0 с генерацией предупреждения.
- До PHP 8.0.0, внутренняя реализация могла возвращать -0 в некоторых редких случаях. В PHP 8.0 это поведение было исправлено, и функция всегда возвращает положительный ноль или ноль без знака.
Расширенные примеры использования
Часто используется для нахождения расстояния или абсолютной разницы.
$a = 15;
$b = 8;
$diff = abs($a - $b);
echo "Разница: $diff";Разница: 7
$value = 0.0001;
$epsilon = 0.001;
if (abs($value) < $epsilon) {
echo 'Значение практически ноль';
}Значение практически ноль
function isDifferenceSmall($x, $y, $threshold = 2) {
return abs($x - $y) <= $threshold;
}
var_dump(isDifferenceSmall(10, 11));
var_dump(isDifferenceSmall(10, 13));bool(true) bool(false)
Приведение к модулю после получения числа, например, из формы.
$userInput = "-123.45";
if (is_numeric($userInput)) {
$absolute = abs($userInput);
echo "Абсолютное значение: $absolute";
}Абсолютное значение: 123.45
Если объект имеет магический метод __toString(), возвращающий число, или приводит себя к числу.
class Temperature {
private $celsius;
public function __construct($celsius) { $this->celsius = $celsius; }
public function __toString() { return (string)$this->celsius; }
}
$temp = new Temperature(-5);
echo abs($temp);5