W3docs

is_finite()

La funzione is_finite() in PHP determina se un valore è un numero finito, escludendo INF, -INF e NAN.

La funzione is_finite() in PHP indica se un numero è finito — ovvero un numero normale che non è né infinito (INF / -INF) né NAN (Not a Number). Questa pagina spiega cosa si intende per finito, come la funzione gestisce i valori non numerici e quando utilizzarla nel codice reale.

Sintassi

is_finite(float $num): bool
  • $num — il valore da verificare. Viene trattato come float; le stringhe numeriche e gli interi vengono convertiti automaticamente.
  • Valore restituitotrue se $num è un numero finito, false se è INF, -INF o NAN.

Perché il concetto di "finito" è importante

L'aritmetica in virgola mobile può produrre valori speciali che non sono numeri ordinari:

  • INF e -INF compaiono quando un risultato supera l'intervallo di un float (ad esempio dividendo per zero con i float, o con PHP_FLOAT_MAX * 2).
  • NAN compare per operazioni non definite come sqrt(-1) o INF - INF.

Questi valori si propagano silenziosamente nei calcoli successivi e compromettono i confronti (NAN == NAN restituisce persino false). is_finite() consente di rilevarli prima che corrompano l'output.

Esempio di base

php— editable, runs on the server

Questo imposta una variabile su un numero ordinario e stampa The number is a finite number, perché 10 è finito.

Comportamento con valori diversi

L'esempio seguente mostra cosa restituisce is_finite() per i casi limite più comuni:

<?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
?>

Si noti che is_finite() non verifica che un valore sia numerico — esegue prima la conversione. is_finite("hello") diventa is_finite(0.0) e restituisce true. Se è necessario confermare che un valore è effettivamente un numero, validarlo prima con is_numeric().

Un caso d'uso pratico

Un pattern comune consiste nel proteggere un calcolo che potrebbe andare in overflow verso 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
?>

Qui safeSquare() restituisce null invece di permettere a INF di propagarsi nel resto del programma, così il chiamante può gestire il fallimento in modo pulito. (Si noti che in PHP 8+, la divisione intera/float per zero genera un DivisionByZeroError anziché produrre INF, quindi l'overflow è il modo tipico in cui si incontra un risultato infinito.)

Funzioni correlate

  • is_infinite() — il controllo opposto: restituisce true per INF / -INF.
  • is_nan() — verifica specificamente la presenza di NAN.
  • is_numeric() — controlla se un valore è un numero o una stringa numerica prima di eseguire operazioni matematiche.
  • is_float() — controlla se il tipo di una variabile è float.

Conclusione

is_finite() è una piccola ma importante protezione quando si lavora con la matematica in virgola mobile in PHP. Restituisce true solo per i numeri ordinari e false per INF, -INF e NAN, consentendo di intercettare overflow e risultati non definiti prima che si propaghino. Abbinala a is_numeric() per la validazione dell'input e a is_infinite() / is_nan() quando è necessario sapere esattamente quale valore speciale è stato ottenuto.

Esercizio

Pratica
Qual è l'utilizzo corretto della funzione 'is_finite' in PHP?
Qual è l'utilizzo corretto della funzione 'is_finite' in PHP?
Was this page helpful?