W3docs

is_finite()

Die Funktion is_finite() in PHP prüft, ob ein Wert eine endliche Zahl ist – weder unendlich (INF / -INF) noch NAN.

Die Funktion is_finite() in PHP gibt an, ob eine Zahl endlich ist – also eine gewöhnliche Zahl, die weder unendlich (INF / -INF) noch NAN (Not a Number) ist. Diese Seite erklärt, was als endlich gilt, wie die Funktion nicht-numerische Werte behandelt und wann Sie sie in echtem Code einsetzen würden.

Syntax

is_finite(float $num): bool
  • $num — der zu prüfende Wert. Er wird als float behandelt; numerische Strings und Integer werden automatisch konvertiert.
  • Rückgabewerttrue, wenn $num eine endliche Zahl ist, false, wenn es INF, -INF oder NAN ist.

Warum „endlich" wichtig ist

Gleitkomma-Arithmetik kann spezielle Werte erzeugen, die keine gewöhnlichen Zahlen sind:

  • INF und -INF entstehen, wenn ein Ergebnis den Bereich eines float überschreitet (zum Beispiel bei der Division durch null mit Gleitkommazahlen oder bei PHP_FLOAT_MAX * 2).
  • NAN entsteht bei undefinierten Operationen wie sqrt(-1) oder INF - INF.

Diese Werte breiten sich still in späteren Berechnungen aus und verfälschen Vergleiche (NAN == NAN ergibt sogar false). is_finite() ermöglicht es Ihnen, sie zu erkennen, bevor sie Ihre Ausgabe korrumpieren.

Einfaches Beispiel

php— editable, runs on the server

Hier wird eine Variable auf eine gewöhnliche Zahl gesetzt und The number is a finite number ausgegeben, da 10 endlich ist.

Verhalten verschiedener Werte

Das folgende Beispiel zeigt, was is_finite() für die häufigen Grenzfälle zurückgibt:

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

Beachten Sie, dass is_finite() nicht prüft, ob ein Wert numerisch ist – es findet zuerst eine Typumwandlung statt. is_finite("hello") wird zu is_finite(0.0) und gibt true zurück. Wenn Sie sicherstellen müssen, dass ein Wert tatsächlich eine Zahl ist, validieren Sie ihn zunächst mit is_numeric().

Ein praktischer Anwendungsfall

Ein gängiges Muster ist die Absicherung einer Berechnung, die zu INF überlaufen könnte:

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

Hier gibt safeSquare() null zurück, anstatt INF in den Rest des Programms durchsickern zu lassen, sodass der Aufrufer den Fehler sauber behandeln kann. (Beachten Sie, dass in PHP 8+ die Division von Integer/Float durch null einen DivisionByZeroError wirft, anstatt INF zu erzeugen – daher ist ein Überlauf der typische Weg, wie Sie auf ein unendliches Ergebnis stoßen.)

Verwandte Funktionen

  • is_infinite() — die umgekehrte Prüfung: gibt true für INF / -INF zurück.
  • is_nan() — prüft speziell auf NAN.
  • is_numeric() — prüft, ob ein Wert eine Zahl oder ein numerischer String ist, bevor Sie Mathematik durchführen.
  • is_float() — prüft, ob der Typ einer Variable float ist.

Fazit

is_finite() ist eine kleine, aber wichtige Absicherung bei der Arbeit mit Gleitkomma-Mathematik in PHP. Sie gibt true nur für gewöhnliche Zahlen zurück und false für INF, -INF und NAN, sodass Sie Überlauf und undefinierte Ergebnisse abfangen können, bevor sie sich ausbreiten. Kombinieren Sie sie mit is_numeric() zur Eingabevalidierung und mit is_infinite() / is_nan(), wenn Sie genau wissen müssen, auf welchen speziellen Wert Sie gestoßen sind.

Übungen

Übung
Was ist die korrekte Verwendung der Funktion 'is_finite' in PHP?
Was ist die korrekte Verwendung der Funktion 'is_finite' in PHP?
Was this page helpful?