W3docs

is_finite()

Découvrez la fonction is_finite() en PHP, utilisée pour déterminer si une valeur est un nombre fini.

La fonction is_finite() en PHP vous indique si un nombre est fini — c'est-à-dire un nombre ordinaire qui n'est ni infini (INF / -INF) ni NAN (Not a Number). Cette page explique ce qui est considéré comme fini, comment la fonction gère les valeurs non numériques, et quand l'utiliser dans du code réel.

Syntaxe

is_finite(float $num): bool
  • $num — la valeur à tester. Elle est traitée comme un float ; les chaînes numériques et les entiers sont convertis automatiquement.
  • Valeur de retourtrue si $num est un nombre fini, false s'il vaut INF, -INF ou NAN.

Pourquoi le concept de « fini » est important

L'arithmétique en virgule flottante peut produire des valeurs spéciales qui ne sont pas des nombres ordinaires :

  • INF et -INF apparaissent lorsqu'un résultat dépasse la plage d'un float (par exemple en divisant par zéro avec des flottants, ou avec PHP_FLOAT_MAX * 2).
  • NAN apparaît pour des opérations indéfinies telles que sqrt(-1) ou INF - INF.

Ces valeurs se propagent silencieusement dans les calculs ultérieurs et faussent les comparaisons (NAN == NAN vaut même false). is_finite() vous permet de les détecter avant qu'elles ne corrompent votre sortie.

Exemple de base

php— editable, runs on the server

Ce code affecte un nombre ordinaire à une variable et affiche The number is a finite number, car 10 est fini.

Comportement selon les valeurs

L'exemple ci-dessous montre ce que is_finite() retourne pour les cas limites courants :

<?php
var_dump(is_finite(10));               // bool(true)  — a normal integer
var_dump(is_finite(3.14));             // bool(true)  — a normal float
var_dump(is_finite("42"));             // bool(true)  — numeric string is cast to float
var_dump(is_finite(PHP_FLOAT_MAX));    // bool(true)  — large but still finite
var_dump(is_finite(INF));              // bool(false) — positive infinity
var_dump(is_finite(-INF));             // bool(false) — negative infinity
var_dump(is_finite(PHP_FLOAT_MAX * 2));// bool(false) — overflows to INF
var_dump(is_finite(NAN));              // bool(false) — Not a Number
?>

Notez que is_finite() ne vérifie pas qu'une valeur est numérique — elle effectue d'abord une conversion. is_finite("hello") devient is_finite(0.0) et retourne true. Si vous devez confirmer qu'une valeur est réellement un nombre, validez-la d'abord avec is_numeric().

Cas d'utilisation pratique

Un schéma courant consiste à protéger un calcul susceptible de déborder vers INF :

<?php
function safeSquare($x) {
  $result = $x * $x;
  // If the multiplication overflows, $result becomes INF.
  return is_finite($result) ? $result : null;
}

var_dump(safeSquare(3.0));            // float(9)
var_dump(safeSquare(PHP_FLOAT_MAX));  // NULL — squaring overflows to INF
?>

Ici, safeSquare() retourne null au lieu de laisser INF se propager dans le reste du programme, ce qui permet à l'appelant de gérer l'échec proprement. (Notez qu'en PHP 8+, la division d'un entier ou d'un flottant par zéro lève une DivisionByZeroError plutôt que de produire INF, donc le débordement est la façon habituelle d'obtenir un résultat infini.)

Fonctions associées

  • is_infinite() — la vérification inverse : retourne true pour INF / -INF.
  • is_nan() — teste spécifiquement NAN.
  • is_numeric() — vérifie si une valeur est un nombre ou une chaîne numérique avant d'effectuer des calculs.
  • is_float() — vérifie si le type d'une variable est float.

Conclusion

is_finite() est une protection modeste mais importante lorsque vous travaillez avec des calculs en virgule flottante en PHP. Elle retourne true uniquement pour les nombres ordinaires et false pour INF, -INF et NAN, vous permettant de détecter les débordements et les résultats indéfinis avant qu'ils ne se propagent. Combinez-la avec is_numeric() pour la validation des entrées, et avec is_infinite() / is_nan() lorsque vous devez savoir exactement quelle valeur spéciale a été rencontrée.

Pratique

Pratique
Quelle est l'utilisation correcte de la fonction 'is_finite' en PHP ?
Quelle est l'utilisation correcte de la fonction 'is_finite' en PHP ?
Was this page helpful?