Abs: примеры (PHP)

Использование функции 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() предпочтительно использовать для простого получения модуля скалярного числового значения.

Аналоги в других языках

Python

Функция abs() работает аналогично, но также переопределяется для пользовательских объектов через магический метод __abs__.

print(abs(-15))
print(abs(-2.78))
15
2.78
JavaScript

Метод Math.abs(). Всегда возвращает число. NaN для нечисловых значений.

console.log(Math.abs(-7));
console.log(Math.abs('-3.5'));
7
3.5
MySQL

Функция ABS(). Работает в запросах SQL.

SELECT ABS(-100.50) AS result;
result: 100.50
C++

Используются функции abs(), labs(), llabs() для разных целочисленных типов и fabs() для чисел с плавающей точкой из библиотеки cmath.

В отличие от PHP, в статически типизированных языках часто требуется использовать разные функции для разных типов данных.

Типичные ошибки

Передача нечислового аргумента (PHP 8+)

Начиная с PHP 8.0.0, передача нескалярного или неконвертируемого в число аргумента вызывает TypeError.

echo abs("текст");
TypeError: abs(): Argument #1 ($num) must be of type int|float, string given
Поведение в PHP 7 и ниже

В более ранних версиях такая передача могла приводить к неочевидным результатам.

// PHP 7
var_dump(abs("текст"));
int(0)
Ожидание целого числа при работе с float

Важно помнить о типе возвращаемого значения.

$result = abs(-5.5);
// Если логика программы ожидает int, может возникнуть ошибка.
echo $result + 1; // Сложение float и int
6.5

Изменения в последних версиях PHP

  • PHP 8.0.0: Функция abs() теперь выбрасывает исключение TypeError, если аргумент не является числом (int, float) или числовой строкой. Ранее нечисловые строки преобразовывались в 0, а для массивов или объектов возвращался 0 с генерацией предупреждения.
  • До PHP 8.0.0, внутренняя реализация могла возвращать -0 в некоторых редких случаях. В PHP 8.0 это поведение было исправлено, и функция всегда возвращает положительный ноль или ноль без знака.

Расширенные примеры использования

Вычисление разницы между числами

Часто используется для нахождения расстояния или абсолютной разницы.

Пример php
$a = 15;
$b = 8;
$diff = abs($a - $b);
echo "Разница: $diff";
Разница: 7
Проверка близости значения к нулю
Пример php
$value = 0.0001;
$epsilon = 0.001;
if (abs($value) < $epsilon) {
    echo 'Значение практически ноль';
}
Значение практически ноль
Работа в пользовательской функции проверки
Пример php
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)
Обработка пользовательского ввода

Приведение к модулю после получения числа, например, из формы.

Пример php
$userInput = "-123.45";
if (is_numeric($userInput)) {
    $absolute = abs($userInput);
    echo "Абсолютное значение: $absolute";
}
Абсолютное значение: 123.45
Использование с объектами, поддерживающими числовое приведение

Если объект имеет магический метод __toString(), возвращающий число, или приводит себя к числу.

Пример php
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

PHP abs function comments

En
Abs Returns the absolute value of a number